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

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

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

int constNumNum=0;
int num1=0;
int num2=0;
int minNum=0;
public int lowestCommonAncestor (TreeNode root, int o1, int o2) {
    if (null == root || o1==o2) return 0;
    num1=o1;
    num2=o2;
    process(root);
    return minNum;
}

void process(TreeNode root){
    dfs(root);
    //根节点都没有找到直接返回
    if(constNum<2) return;
    if(constNum==2)  minNum=root.val;
    constNum=0;
    process(root.left);
    if(constNum==1) return;
    if(constNum==2)  minNum=root.val;
        
    //因为本题保证二叉树中每个节点的val值均不相同,所以如果遍历完左子树之后constNum>0,就没有必要再去遍历右子树
    if(constNum==0){
       process(root.right);
    }
}

void dfs(TreeNode root) {
    if(constNum<2){
        if (null == root) return;
        if (root.val==num1 || root.val==num2) constNum++;
        dfs(root.left);
        dfs(root.right);
    }
}

}

全部评论

相关推荐

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