题目地址:链接
思路: 后序遍历递归查找,标记左右子树是否包含目标节点,首次同时满足的节点即为最近公共祖先。
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} root
* @param {TreeNode} p
* @param {TreeNode} q
* @return {TreeNode}
*/
var lowestCommonAncestor = function(root, p, q) {
let ans = root;
let flag = true;
const dfs = (root, l, r) => {
if(!root) return [l, r];
if(l && r) return [l, r];
let [ll, rl] = dfs(root.left, l, r);
let [lr, rr] = dfs(root.right, l, r);
l = l || ll || lr;
r = r || rl || rr;
if(p == root) l = true;
if(q == root) r = true;
if((l || ll || lr) && (r || rl || rr) && flag) {
ans = root;
flag = false;
}
return [l, r]
}
dfs(root, false, false)
return ans;
};
8万+

被折叠的 条评论
为什么被折叠?



