算法实现之首个共同祖先
题目地址:
首个共同祖先
题目描述
设计并实现一个算法,找出二叉树中某两个节点的第一个共同祖先。不得将其他的节点存储在另外的数据结构中。注意:这不一定是二叉搜索树。
例如,给定如下二叉树: 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号