算法实现之首个共同祖先

题目地址:
首个共同祖先

题目描述
设计并实现一个算法,找出二叉树中某两个节点的第一个共同祖先。不得将其他的节点存储在另外的数据结构中。注意:这不一定是二叉搜索树。

例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]
image

示例
image

解题思路:
本题主要是考虑两个节点出现的位置,一般有三种情况;

  • 1、两个节点其中一个是根节点,
    第一个共同祖先就是根节点

  • 2、两个节点分别在根节点的左右子树上
    第一个共同祖先就是根节点

  • 3、两个节点分别在左子树或者右子树上
    如果都在左子树上 第一个共同祖先就是在根节点的左子树上
    如果都在右子树上 第一个共同祖先就是在根节点的右子树上

代码实现

var lowestCommonAncestor = function(root, p, q) {
    if(!root || root == p || root == q) {
        return root
    }
    let left = lowestCommonAncestor(root.left, p , q)
    let right = lowestCommonAncestor(root.right, p , q)
    if(left && right) {
        return root
    }
    return left ? left : right
};

posted @ 2022-09-19 16:30  卖萌实习生  阅读(39)  评论(0)    收藏  举报