首页 > 其他分享 >二叉树

二叉树

时间:2022-11-22 00:44:06浏览次数:57  
标签:return val 二叉树 TreeNode null root 节点

01. 二叉搜索树的最近公共祖先

235. 二叉搜索树的最近公共祖先

  • 当我们从上向下去递归遍历,第一次遇到 cur节点是数值在[p, q]区间中,那么cur就是 p和q的最近公共祖先;
  • 当前节点的值都小于p、q值,说明最近公共祖先在当前节点右边;
  • 当前节点的值都大于p、q值,说明最近公共祖先在当前节点左边。
class Solution {
    // 方法1:递归
    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
        if(root == null) return null;
        if(root.val < q.val && root.val < p.val) {
            return lowestCommonAncestor(root.right,p,q); // 说明节点在右子树中
        }else if(root.val > p.val && root.val > q.val) {
            return lowestCommonAncestor(root.left,p,q); // 说明节点在左子树中
        }
        return root;
    }

    // 方法2:迭代
    public TreeNode lowestCommonAncestor(TreeNode root,TreeNode p, TreeNode q) {
        if(root == null) return null;
        while(root != null) {
            if(root.val < q.val && root.val < p.val){
                root = root.right;
            }else if(root.val > p.val && root.val > q.val) {
                root = root.left;
            }else {
                return root;
            }
        }
        return null;
    }

}

标签:return,val,二叉树,TreeNode,null,root,节点
From: https://www.cnblogs.com/hbjiaxin/p/16913905.html

相关文章

  • LC[199] 二叉树的右视图
    [199]二叉树的右视图题目链接:https://leetcode.cn/problems/binary-tree-right-side-view/description/WA一开始的想法是遍历二叉树,只需要右分枝即可。但是如果右边没......
  • 【算法】Java解答有序链表转换二叉搜索树,从中序与后序遍历序列构造二叉树
    有序链表转换二叉搜索树给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差......
  • 二叉树交换左右子树递归以及非递归算法
    递归方式基本思想:1、当待处理节点非空时,判断其左右孩子是否不同时为空:若是,转到2、否则分别递归调用左右子树进行操作。2、新建一个辅助结点,执行交换操作。3、递归调用......
  • 每日算法之判断是不是平衡二叉树
    JZ79判断是不是平衡二叉树描述输入一棵节点数为n二叉树,判断该二叉树是否是平衡二叉树。在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树平衡二叉树(Balan......
  • 遍历二叉树和线索二叉树
    遍历二叉树:   L:左D:根 R:右    DLR-先根遍历    LDR-中序遍历    LRD-后序遍历  要求:给一棵二叉树,写出它的三种遍历顺序   ......
  • 二叉树的性质和存储结构
    性质:在二叉树的第i层最多有2^(i-1)个结点(i>=1)深度为k的二叉树最多有2^k-1个结点(运用等比求和)对任何一棵二叉树T,如果叶子数为n0,度为2的结点数为n2,则n0=n2+1(根据二叉......
  • 二叉树的前、中、后序遍历(迭代版)
    //前序遍历顺序:中-左-右,入栈顺序:中-右-左classSolution{publicList<Integer>preorderTraversal(TreeNoderoot){List<Integer>result=newArrayL......
  • 二叉树的前序、中序、后序遍历
    144.二叉树的前序遍历/***Definitionforabinarytreenode.*publicclassTreeNode{*intval;*TreeNodeleft;*TreeNoderight;*......
  • 二叉树二刷
    今天先整理二叉树,dijkstra和链表二刷过几天有空会整理首先二叉树的几个性质就不说了,其中一个我认为比较好用的是满足二叉树连通,边数等于顶点数-1的结构就一定是一棵树这......
  • 二叉树的三种遍历
    #include<stdio.h>#include<stdlib.h>#include<string.h>chara[55];inti;structnode{intdata;structnode*ls,*rs;};structnode*cr(){structnode*r......