Given a binary tree, determine if it is height-balanced.
For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees of every node never differ by more than 1.
要注意题目和课本上定义的平衡树不一样,这里只要一个节点的左右两边的maxDepth 差不超过一就ok.
所以可以 preorder traversal, 每遍历到一个节点,计算左右的 maxDepth. 当然由于每个节点都会有很多重复计算,效率是比较低的。
public static boolean isBalanced(TreeNode root){
if(root == null) return true;
if (Math.abs(maxDepth(root.left) - maxDepth(root.right)) > 1) return false;
return isBalanced(root.left) && isBalanced(root.right);
}
private static int maxDepth(TreeNode root){
if(root == null) return 0;
return Math.max(maxDepth(root.left)+1,maxDepth(root.right)+1);
}