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

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

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
};
全部评论

相关推荐

白火同学:1、简历可以浓缩成一页,简历简历先要“简”方便HR快速过滤出有效信息,再要“历”用有效信息突出个人的含金量。 2、教育背景少了入学时间~毕业时间,HR判断不出你是否为应届生。 3、如果你的平台账号效果还不错,可以把账号超链接或者用户名贴到对应位置,一是方便HR知道你是具体做了什么内容的运营,看到账号一目了然,二是口说无凭,账号为证,这更有说服力。
面试被问期望薪资时该如何...
点赞 评论 收藏
分享
累死的一条狗:***一人顶10人那你给我发10个人的工资总和吗
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务