给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。
输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1输出:3解释:节点 5 和节点 1 的最近公共祖先是节点 3 。
3 / \ 5 1 / \ / \ 6 2 0 8 / \ 7 4
首先我们分为几种情况
● 考虑root为空的树,那就返回为null
● 如果当前树只有一个节点,比如3,传入的左右节点都为3,那么返回也是3
● 如果是传入为(root,5,1),那我们先在左子树中查找,找到5那就返回,找到1,立刻返回,那么他们的公共组先就是root
● 如果是(root,5,4),同上查找方式,左边找到了5直接返回,右边没有找到,那就以根节点为1,p为5,q为4进行继续查找,,没有就一直找,然后返回为null,那就说明5和4都不在右边的树里面,那就应该左边的树里面,我们看到了5,但是没有找到4,说明4在5的子孙节点里面,那么5就是他们的公共祖先。
function lowestCommonAncestor(root,p,q){ if(!root || root === p || root === q) return root; const left = lowestCommonAncestor(root.left,p,q) const right = lowestCommonAncestor(root.right,p,q) if(left && right){ return root } return left || right}