4.1 检查二叉树是否平衡
代码实现
class TreeNode {
public int val = 0 ;
public TreeNode left = null ;
public TreeNode right = null ;
}
public class Solution {
public static int getHeight (TreeNode node) {
if (node == null )
return 0 ;
else
return Math.max(getHeight(node.left), getHeight(node.right))+1 ;
}
public static boolean isBalance (TreeNode node) {
if (node == null )
return true ;
int left = getHeight(node.left);
int right = getHeight(node.right);
if (Math.abs(left - right) > 1 )
return false ;
else
return isBalance(node.left) && isBalance(node.right);
}
public static boolean isBalance2 (TreeNode root) {
if (checkHeight(root) == -1 )
return false ;
else
return true ;
}
public static int checkHeight (TreeNode node) {
if (node == null )
return 0 ;
int leftHeight = checkHeight(node.left);
if (leftHeight == -1 )
return -1 ;
int rightHeight = checkHeight(node.right);
if (leftHeight == -1 )
return -1 ;
if (Math.abs(leftHeight - rightHeight) > 1 )
return -1 ;
else
return Math.max(checkHeight(node.left), checkHeight(node.right)) + 1 ;
}
}