给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:
一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。
使用后序遍历求高度,一旦左右子树有一方不满足高度差大于1就返回-1,这样一层一层的返回后都是-1,否认返回左右子树的最大高度以方便比较。
public boolean isBalanced(TreeNode root) {
return getDepth(root)!=-1;
}
public int getDepth(TreeNode root){
if(root==null){
return 0;
}
int left=getDepth(root.left);
if(left==-1){
return -1;
}
int right=getDepth(root.right);
if(right==-1){
return -1;
}
if(Math.abs(left-right)>1){
return -1;
}
return Math.max(left, right)+1;
}
在写代码的时候,我忽略了if(left==-1){ return -1; }
和if(right==-1){ return -1; }
这样在求高度差的时候会产生错误,所以一定要明确,其子树高度不符合预期的时候及时判断。