解题思路 从顶至底和从底至顶两种解法。从顶至底相对来讲很直观,每个node判断一遍就可以了。从底至顶需要创建一个计算最大高度的方法,如果left和right相差大于1就返回-1。
从顶至底
public boolean isBalanced(TreeNode root) { if(root == null) return true; if(Math.abs(check(root.left)-check(root.right))>1) return false; //判断关键 return isBalanced(root.left) && isBalanced(root.right); } public int check(TreeNode root){ if(root == null) return 0; int longest = Math.max(check(root.left),check(root.right))+1; return longest; }从底至顶
public boolean isBalanced(TreeNode root) { return recur(root) != -1; } private int recur(TreeNode root) { if(root == null) return 0; int left_value = recur(root.left); if(left_value == -1) return -1; int right_value = recur(root.right); if(right_value == -1) return -1; if(Math.abs(left_value-right_value)>1) return -1; return Math.max(left_value,right_value)+1; }