首页 > 其他分享 >二叉树公共祖先问题

二叉树公共祖先问题

时间:2023-01-27 16:00:32浏览次数:40  
标签:Node head 祖先 public 二叉树 公共 o2 o1

package dayone.tre;

/***
 * o1和o2为head二叉树中的点,找出o1和02的最近公共祖先
 */
public class Test {

    public static Node lowestAncestor(Node head, Node o1, Node o2) {
        //情况一:o1为o2的祖先节点或o2为o1的祖先节点时,则head即为最近公共祖先
        if (head == null || head == o1 || head == o2) {
            return head;
        }
        //情况二
        //向左树递归寻找数据
        Node left = lowestAncestor(head.left, o1, o2);
        //向右树递归寻找数据
        Node right = lowestAncestor(head.right, o1, o2);
        //当左子树和右子数都不为空时,head即为最近公共祖先
        if (left != null && right != null) {
            return head;
        }
        //左右两棵树,并不都有返回值
        return left != null ? left : right;
    }

}

class Node {
    public int value;

    public Node left;

    public Node right;

    public Node(int data) {
        this.value = data;
    }
}

该问题为二叉树dp问题,可以分为两种情况进行求解:

  1.o1为o2的祖先节点或o2为o1的祖先节点

  2.祖先为o1和o2外的节点

 

标签:Node,head,祖先,public,二叉树,公共,o2,o1
From: https://www.cnblogs.com/goPush/p/17068959.html

相关文章

  • 堆和二叉树的关系
    逻辑结构VS物理结构堆:逻辑结构是一颗二叉树(如下图)物理结构是一个数组(如下代码) //上图是一个堆(从小到大)可以用数组表示constheap=[-1,10,14,25,33,81,......
  • 二叉树中是否存在某值
    constbinarySearchTree=(node=tree,target=8)=>{letcurNode=nodewhile(true){if(!curNode){returnfalse}......
  • 二叉树寻找最k小值
    /***注意:left/right值若没有显示设置为null,值即为undefined*在调用二叉树前、中、后序遍历方法时,由于参数设置了默认值(tree)*所以进入了死循环*/consttree={......
  • 代码随想录算法训练营第14天 | 二叉树的递归遍历
    144.二叉树的前序遍历94.二叉树的中序遍历145.二叉树的后序遍历文章:代码随想录(programmercarl.com)视频:每次写递归都要靠直觉?这次带你学透二叉树的递归遍历!|Lee......
  • 力扣101 对称二叉树
    题目:给你一个二叉树的根节点root,检查它是否轴对称。示例:输入:root=[1,2,2,3,4,4,3]输出:true思路:  对于二叉树是否对称,要比较的是根节点的左子树与......
  • 刷刷刷 Day 22 | 235. 二叉搜索树的最近公共祖先
    235.二叉搜索树的最近公共祖先LeetCode题目要求给定一个二叉搜索树,找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树T的两个结......
  • 刷刷刷 Day 21 | 236. 二叉树的最近公共祖先
    236.二叉树的最近公共祖先LeetCode题目要求给定一个二叉树,找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树T的两个节点p、q,......
  • 刷刷刷 Day 20 | 617. 合并二叉树
    617.合并二叉树LeetCode题目要求给你两棵二叉树:root1和root2。想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两......
  • 刷刷刷 Day 20 | 654. 最大二叉树
    654.最大二叉树LeetCode题目要求给定一个不重复的整数数组 nums。 最大二叉树 可以用下面的算法从 nums递归地构建:创建一个根节点,其值为 nums中的最大值。递......
  • 二叉树TwT
    L2-011玩转二叉树给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列。所谓镜面反转,是指将所有非叶结点的左右孩子对换。这里假设......