题解 | #在二叉树中找到两个节点的最近公共祖先#

在二叉树中找到两个节点的最近公共祖先

http://www.nowcoder.com/practice/e0cc33a83afe4530bcec46eba3325116

图片说明

class Solution {
public:
    /**
     * 
     * @param root TreeNode类 
     * @param o1 int整型 
     * @param o2 int整型 
     * @return int整型
     */
    int lowestCommonAncestor(TreeNode* root, int o1, int o2) {
        TreeNode *p=root,*pre=NULL;
        while(p!=pre)
        {
            pre=p;
            if(haveVal(p->left, o1)&&haveVal(p->left, o2))
                p=p->left;
            if(haveVal(p->right, o1)&&haveVal(p->right, o2))
                p=p->right;
        }
        return p->val;
    }
    bool haveVal(TreeNode* root, int o) {
        if(!root)
            return false;
        if(root->val==o||haveVal(root->left,o)||haveVal(root->right,o))
            return true;
        return false;
    }
};

使用递归,haveVal函数返回以root为根节点的树是否有o值的结点

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务