思路:与二叉树最大高度类似,但是这里需要返回 -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); //子树最大高度}}
}