对二叉树做深度优先遍历,递归过程中:
终止条件::当DFS越过叶子节点时候,返回高度0.
返回数值: 从低至上,返回每个节点root 为根节点的字数最大高度(左右字数的中最)
当我们发现有一个例子,左右子树高度差》1的情况时,代表此树不是平衡二叉树。
当发现不是平衡二叉树时,后面的高度计算都没有意义了,因此一路返回-1,避免后序的计算。
最差情况是对树做一篇完成的DFS,时间复杂度为0(n).
class Solution {
public boolean isBalanced(TreeNode root) {
return depth(root) != -1;
}
private int depth(TreeNode root) {
if (root == null) return 0;
int left = depth(root.left);
if(left == -1) return -1;
int right = depth(root.right);
if(right == -1) return -1;
return Math.abs(left - right) < 2 ? Math.max(left, right) + 1 : -1;
}
}