题解 | #二分查找-II#

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

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

本题重点是深度遍历
通过返回空状态把叶子向上浮动
向上浮动的叶子找到第一个交点后再继续浮动到跟节点,最后返回的就是交点
    public int lowestCommonAncestor (TreeNode root, int o1, int o2) {
        // write code here
        return DFS(root,o1,o2).val;
    }


    //重点是把空和要求的叶子向上移动
    public TreeNode DFS(TreeNode root, int o1, int o2) {
        if (root == null) return root;//空情况直接返回
        if(root.val == o1 || root.val == o2) return root;//找到要的叶子了
        //后序遍历
        TreeNode left = DFS(root.left, o1, o2);
        TreeNode right = DFS(root.right, o1, o2);

        //只能返回包含两个要求叶子的支树,不包含叶子就把null向上传递
        if(left==null&&right==null)return null;
        else if(left!=null&&right!=null)return root;
        //当开始向上单独传递左或者右的时候,实际上是向上移动叶子
        else if(left == null)return right;
        else return left;
    }




全部评论

相关推荐

2025-12-22 15:04
江西农业大学 Web前端
SaviorSu:直接说下学期可以请假,一般情况学校允许我26届,大三就直接去实习了
点赞 评论 收藏
分享
2025-11-27 01:09
电子科技大学 C++
牛客68151836...:实习不相关就靠后写吧,因为大概面试官也不感兴趣。前面区域写一点更容易引起提问的内容,比如投后台就把服务器项目提前。
简历上的经历如何包装
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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