本题中:一颗高度平衡的二叉树的定义:一棵二叉树每个节点的左右子树的高度差的绝对值不超过1。也就是说通过后序遍历去比较它的左右子树的高度。
//采用递归的方式,还是将主要的逻辑封装成一个getDepth()方法
public boolean isBalanced(TreeNode root) {
if(getDepth(root)==-1){
return false;
}
return true;
}
public 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;
if(leftDepth-rightDepth<-1||leftDepth-rightDepth>1){
return -1;//描述不平衡
}
return 1+(leftDepth>rightDepth?leftDepth:rightDepth);//从下往上
}