Lowest Common Ancestor of a Binary Tree

Nov 07, 2017

Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree.

According to the definition of LCA on Wikipedia: “The lowest common ancestor is defined between two nodes v and w as the lowest node in T that has both v and w as descendants (where we allow a node to be a descendant of itself).”

        _______3______
/              \
___5__          ___1__
/      \        /      \
6      _2       0       8
/  \
7   4


For example, the lowest common ancestor (LCA) of nodes 5 and 1 is 3. Another example is LCA of nodes 5 and 4 is 5, since a node can be a descendant of itself according to the LCA definition.

• leftright都非空，那么说明root节点就是lowestCommonAncestor，那我们就返回root
• 只有left非空，那么说明lowestCommonAncestor在左子树中,那么我们就返回left
• 只有right非空，与上面类似，我们就直接返回right
• 两个都是空，说明pq都不在这棵子树中，那其lowestCommonAncestor就是nullptr.

• rootnullptr,那么就说明到了最底部了，直接返回nullptr即可
• rootpq相等,说明我们找到了其一个祖先，则返回pq.

TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
if (root == nullptr || root == p || root == q) return root;

TreeNode *left = lowestCommonAncestor(root->left,p,q);
TreeNode *right = lowestCommonAncestor(root->right,p,q);

if (left && right) return root;
else if (left) return left;
else if (right) return right;
else return nullptr;

}


emmmm，但是上面的解法是过了测试的。

LeetCodeLeetCodeTree

Product of Array Except Self