leetcode 236. Lowest Common Ancestor of a Binary Tree

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;   
    }
};

猜你喜欢

转载自blog.csdn.net/Sea_muxixi/article/details/80002045