236. 二叉树的最近公共祖先

题目描述:

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

主要思路:

利用dfs遍历树,依次判断节点是否为公共祖先节点。

class Solution {
public:
    TreeNode* ans;
    bool dfs(TreeNode* root, TreeNode* p, TreeNode* q)
    {
        if(!root)
            return false;
        bool l=dfs(root->left,p,q);
        bool r=dfs(root->right,p,q);
        if(l&&r||((l||r)&&(root->val==p->val||root->val==q->val)))
            ans=root;
        if(l|r|root->val==p->val|root->val==q->val)
            return true;
        else
            return false;
    }
    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        dfs(root,p,q);
        return ans;
    }
};

你可能感兴趣的:(Leetcode,深度优先,算法)