leetcode 236. Lowest Common Ancestor of a Binary Tree
题意:给你二叉树的两个节点,找到两个节点的最近公共祖先。
5和1的最近公共祖先是3,5和4的最近公共祖先是5.
这是最近公共祖先的问题,也就是LCA问题。(Lowest Common Ancestor)
思路:
二叉树求最近公共祖先,肯定要爆搜!
从叶子节点向上,标记子树中出现目标节点的情况。如果子树中有目标节点,标记为那个目标节点,如果没有,标记为null。显然,如果左子树、右子树都有标记,说明就已经找到最小公共祖先了。如果在根节点为p的左右子树中找p、q的公共祖先,则必定是p本身。
class Solution {
public:
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
if(root == NULL || p == root || q == root ) return root;
TreeNode* left = lowestCommonAncestor(root->left,p,q);
TreeNode* right = lowestCommonAncestor(root->right,p,q);
if(left && right) return root;
return left?left:right;
}
};