力扣 236. 二叉树的最近公共祖先

题目描述:

给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”

解析:

1.如果根节点为空或者根节点等于p或q,直接返回根节点即可
2.定义节点pqInLeft,pqInRight
3.分为三种情况
左子树中没有p,q的值,则返回右子树的节点pqInRight
右子树中没有p,q的值,则返回左子树的节点pqInLeft
p,q分别在左右子树中,则返回根节点

Java:

public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
        if(root == null || root == p || root == q) {
            return root;
        }
        TreeNode pqInLeft = lowestCommonAncestor(root.left, p, q);
        TreeNode pqInRight = lowestCommonAncestor(root.right, p, q);
        if(pqInLeft == null) {
            return pqInRight;
        } else if(pqInRight == null) {
            return pqInLeft;
        } else {
            return root;
        }
    }

JavaScript:

var lowestCommonAncestor = function(root, p, q) {
    if(root === null || root === p || root === q) {
        return root;
    }
    let pqInLeft = lowestCommonAncestor(root.left, p, q);
    let pqInRight = lowestCommonAncestor(root.right, p, q);
    if(pqInLeft === null) {
        return pqInRight;
    } else if(pqInRight === null) {
        return pqInLeft;
    } else {
        return root;
    }
};
全部评论

相关推荐

在笔试的大西瓜很矫健:校招数分不用想了,这经历和学历都不够用,大厂更别想,初筛都过不了,说点不好听的小厂数分都进不去(小厂也是假数分),要两个对口实习+3个项目(或者3+2),而且要有含金量才能补一点你的学历劣势。 建议刷实习,社招找数分,校招看运气,能入行业就行,可以运营转数分
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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