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

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

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

```/*
 * function TreeNode(x) {
 *   this.val = x;
 *   this.left = null;
 *   this.right = null;
 * }
 */

/**
 * 
 * @param root TreeNode类 
 * @param o1 int整型 
 * @param o2 int整型 
 * @return int整型
 */
function lowestCommonAncestor( root ,  o1 ,  o2 ) {
    // write code here
    //与JZ68区别:二叉树不同于二叉搜素树,其值没有规律。
    if(root===null){return null}
    if(root.val===o1){return root.val} //查找到o1节点 返回值
    if(root.val===o2){return root.val} //查找到o2节点 返回值
    let left = lowestCommonAncestor( root.left ,  o1 ,  o2 ) //left记录左边子树寻找的结果
    let right = lowestCommonAncestor( root.right ,  o1 ,  o2 ) //right记录右边子树寻找的结果
    //如果o1、o2在两侧,对于栈顶的当前函数root的left和right都有值
    if(left&&right){return root.val}
    //如果单侧有值,返回这个值,如果到最后没有经历上面一行的代码,说明这个值就是最近公共祖先
    if(left){return left}
    if(right){return right}
}
module.exports = {
    lowestCommonAncestor : lowestCommonAncestor
};
全部评论

相关推荐

11-26 22:34
已编辑
重庆邮电大学 Java
快手 客户端开发 (n+5)k*16 公积金12
牛客895077908号:佬 什么双非硕啊
点赞 评论 收藏
分享
Java抽象带篮子:难蚌,点进图片上面就是我的大头😆
点赞 评论 收藏
分享
评论
2
收藏
分享
牛客网
牛客企业服务