方法一:递归函数同时包含高度和是否平衡。
public class T_39_IsBalanced {
public boolean IsBalanced_Solution(TreeNode root) {
if (root == null) {
return true;
}
return getDepth(root) != -1;
}
private int getDepth(TreeNode root) {
if (root == null) {
return 0;
}
int lh = getDepth(root.left);
int rh = getDepth(root.right);
if (lh == -1 || rh == -1 || Math.abs(lh - rh) > 1) {
return -1;
}
return Math.max(lh, rh) + 1;
}
}
方法二:左右两子树高度差的绝对值不超过1,并且左右两子树都是平衡二叉树。主函数时间复杂度 O(n),depth的时间复杂度O(logn).整体复杂度为O(nlogn)
public class T_39_IsBalanced {
public boolean IsBalanced_Solution(TreeNode root) {
return getDepth(root) != -1;
}
private int getDepth(TreeNode root) {
if (root == null)
return 0;
int leftDepth = getDepth(root.left);
if (leftDepth == -1) {
return -1;
}
int rightDepth = getDepth(root.right);
if (rightDepth == -1) {
return -1;
}
return Math.abs(leftDepth - rightDepth) > 1 ? -1 : Math.max(leftDepth, rightDepth) + 1;
}
}