题目
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.
自己的答案
理解什么是二叉平衡树很重要,按照定义用递归的方法可以较容易写出答案,如下:
class Solution {
public 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));
}
public int maxDepth(TreeNode root) {
if (root == null) return 0;
return Math.max(maxDepth(root.left), maxDepth(root.right)) + 1;
}
}
其中调用了求树高度的递归方法。但是此算法从根节点所在层次开始每次都要求层高,复杂度较高,可以在求的同时判断子问题是否符合条件,若 left 或 right 子节点为根结点的子树不符合二叉平衡树定义,可以直接 return false 。改进后的答案如下:
改进的答案
class Solution {
public boolean isBalanced(TreeNode root) {
return (maxDepth(root) != -1);
}
public int maxDepth(TreeNode root) {
if (root == null) return 0;
int left = maxDepth(root.left);
if (left == -1) return -1;
int right = maxDepth(root.right);
if (right == -1) return -1;
if (Math.abs(left - right) > 1) return -1;
return Math.max(left, right) + 1;
}
}