public class Solution {
public boolean IsBalanced_Solution(TreeNode root) {
if(root == null) return true;
int[] depth = new int[1];
return IsBalanced(root, depth);
}
public boolean IsBalanced(TreeNode root, int[] d) {
if(root == null) return true;
int[] l = new int[1], r = new int[1];
if(!IsBalanced(root.left, l)) return false;
if(!IsBalanced(root.right, r)) return false;
d[0] = Math.max(l[0], r[0]) + 1;
if(Math.abs(l[0]-r[0])<2) return true;
return false;
}
}
public class Solution {
public boolean IsBalanced_Solution(TreeNode root) {
if(root == null) return true;
int l = depth(root.left), r = depth(root.right);
if(Math.abs(l-r) > 1) return false;
return IsBalanced_Solution(root.left) && IsBalanced_Solution(root.right);
}
public int depth(TreeNode root) {
if(root == null) return 0;
return 1 + Math.max(depth(root.left), depth(root.right));
}
}
相比之下:第二种办法虽然naive,但是每个节点遍历了多次,第一中办法是在遍历的过程中同时把depth也求了