public boolean isBalanced(TreeNode root) {
}
判断一颗二叉树是否是平衡二叉树,需要看它左右子树的高度差的绝对值,绝对值大于1则这颗二叉树不是平衡二叉树。
我们需要一个方法来获得二叉树的高度。
public int maxDepth(TreeNode root) {
if(root == null){
return 0;
}
int leftSize = maxDepth(root.left);
int rightSize = maxDepth(root.right);
return (leftSize>rightSize)?(leftSize+1):(rightSize+1);
}
一棵树假设左子树高度为2,右子树高度为3.那这颗树的高度为4。
有了这个方法,我们就可以判断每个节点的左右子树高度差。
public boolean isBalanced(TreeNode root) {
if(root == null){
return true;
}
return (Math.abs(maxDepth(root.left) - maxDepth(root.right))<= 1) && isBalanced(root.left) && isBalanced(root.right);
}
Math.abs(maxDepth(root.left) - maxDepth(root.right))<= 1
用左子树的高度-右子树的高度拿到绝对值进行判断左右子树高度差。大于1就不是平衡二叉树,返回false.同时判断左子树和右子树是否是平衡二叉树。递归下来每一个节点都会判断一次。
如图,虽然根节点的左右子树高度一样。但是走到根的右子树时,高度差为2.返回条件表达式只要有一项为false,返回的false。