算法实现之首个共同祖先
题目地址:
首个共同祖先
题目描述
设计并实现一个算法,找出二叉树中某两个节点的第一个共同祖先。不得将其他的节点存储在另外的数据结构中。注意:这不一定是二叉搜索树。
例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]

示例

解题思路:
本题主要是考虑两个节点出现的位置,一般有三种情况;
- 
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
};

 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号