235、236. 二叉搜索树/二叉树的最近公共祖先

注意二叉搜索树与二叉树的区别,左<根<右

//(1)二叉树
class Solution {
public:
    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
            if(root==NULL||p==root||q==root)
                return root;
            if(inTree(root->left,p))
            {
                if(inTree(root->right,q))
                    return root;
                return lowestCommonAncestor(root->left,p,q);//递归
            }
            else
            {
                if(inTree(root->left,q))
                    return root;
                return lowestCommonAncestor(root->right,p,q);
            }
        
    }
private:
    bool inTree(TreeNode* root,TreeNode* t)//判断t在不在该树
    {
        if(root==NULL)
            return false;
        if(root==t)
            return true;
        bool found=inTree(root->left,t);
        if(!found)
            found=inTree(root->right,t);
        return found;
    }
};

以下是参考他人的
作者:ColiYin
来源:CSDN
原文:https://blog.csdn.net/sinat_20177327/article/details/80046714
版权声明:本文为博主原创文章,转载请附上博文链接!

//(2)二叉搜索树  
class Solution {
public:
    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        if (root == NULL || root == p || root == q)
            return root;

        if ((root->val > p->val && root->val < q->val) ||    //p和q在root的左右两边
         root->val < p->val && root->val > q->val)
            return root;

        if (p->val < root->val && q->val < root->val)    // p和q都小于root,则结果在左边
            return lowestCommonAncestor(root->left, p, q);
        else
            return lowestCommonAncestor(root->right, p, q);
    }
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容