Leetcode 236 二叉树的最近公共祖先问题

Leetcode 236 二叉树的最近公共祖先问题_第1张图片

这道题目偏难,这样想:

边界条件,如果root==NULL,返回空,如果root==p或者root==q那么就返回root,否则就去递归左子数和右子数。

去看左子树是否包含p和q,以及右子数是否包含p和q,假设左子数已经包含p和q,那么右子数肯定不好含p和q。根据递归函数的定义 TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) 返回以root为根节点,p和q的最近公共祖先,只要找到就返回。

class Solution {
public:
    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        if(root==NULL) return NULL;
        if(root==p||root==q) return root;
        TreeNode* left = lowestCommonAncestor(root->left, p, q);    // 左子数是否存在p
        TreeNode* right = lowestCommonAncestor(root->right,p,q);
        if(left==NULL) return right;
        if(right==NULL) return left;
        return root;
    }
};

 

你可能感兴趣的:(算法)