剑指Offer面试题55-2:平衡二叉树

这道题我一开始的想法是,对于每一个节点,遍历其左右子树,但是这样的方法,是n^2的时间复杂度,更好的我没有想出来,就看了答案。

答案方法:(https://leetcode-cn.com/problems/ping-heng-er-cha-shu-lcof/solution/mian-shi-ti-55-ii-ping-heng-er-cha-shu-cong-di-zhi/

后序遍历,剪枝

当左右子树差大于2,返回-1,这个-1,用来剪枝,直接结束所有递归。这样对于true,false的判断,就变成了是否为-1的判断。

如果root为null,那么直接返回0,表示所在的能提供的深度为0.

不过这样的计算方式,每个节点得到的是从底向上的深度,而不是从顶向下的,不过不影响解题。

    public boolean isBalanced(TreeNode root) {
        return  recur(root)!=-1;
    }
    public int recur(TreeNode root){
        if(root == null){
            return 0;
        }
        int left = recur(root.left);
        if(left == -1) return -1;
        int right = recur(root.right);
        if(right == -1) return -1;

        return Math.abs(left-right)<2?Math.max(left,right)+1:-1;
        
    }

猜你喜欢

转载自blog.csdn.net/qq_40473204/article/details/115006970