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

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

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

  • step 1:如果o1和o2中的任一个和root匹配,那么root就是最近公共祖先。

  • step 2:如果都不匹配,则分别递归左、右子树。

  • step 3:如果有一个节点出现在左子树,并且另一个节点出现在右子树,则root就是最近公共祖先.

  • step 4:如果两个节点都出现在左子树,则说明最低公共祖先在左子树中,否则在右子树。

  • step 5:继续递归左、右子树,直到遇到step1或者step3的情况。

int lowestCommonAncestor(struct TreeNode* root, int o1, int o2 ) {
    // write code here
    if(root==NULL){
        return -1;
    }
    if(root->val==o1 || root->val==o2){
        return root->val;
    }
    int left=lowestCommonAncestor(root->left, o1, o2);
    int right=lowestCommonAncestor(root->right, o1, o2);
    if(left==-1){//左边没找到任何相同,那么一定在右边
        return right;
    }
    if(right==-1){//右边没有找到任何相同,则一定在左边
        return left;
    }
    return root->val;//左右都找到了,那说明当前root是最近公共祖先
}
全部评论

相关推荐

躺尸修仙中:因为很多92的也去卷中小厂,反正投递简历不要钱,面试不要钱,时间冲突就推,不冲突就面试积累经验
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
6
1
分享
牛客网
牛客企业服务