思路:与二叉树最大高度类似,但是这里需要返回 -1 的高度来标识不是平衡二叉树,判断左右子树的高度相差大于1则不平衡,否则就是平衡。
class Solution {
public boolean isBalanced(TreeNode root) {
int ans = func(root);
if(ans > -1) {
return true;
}
return false;
}
public int func(TreeNode root) {
if(root == null) return 0;
//如果不是平衡二叉树,返回-1作为信号
int leftNum = func(root.left);
if(leftNum == -1) return -1;
int rightNum = func(root.right);
if(rightNum == -1) return -1;
//左右相差大于1则不是平衡二叉树
if(Math.abs(leftNum-rightNum) > 1) {
return -1;
}else {
return 1+ Math.max(leftNum, rightNum); //子树最大高度
}
}
}