题解 | #二分查找-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;
    }




全部评论

相关推荐

伟大的烤冷面被普调:暨大✌🏻就是强
点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务