分析:实现求解 二叉树中每个结点的高度的函数height(BinaryNode );然后先序遍历二叉树中的每一个结点node,求出该结点的左子树高度height(node.left) 和 右子树高度 height(node.right)。根据左右子树的高度判断是否为平衡二叉树。如果左子树不是平衡二叉树直接结束,同理右子树也是。
public class CheckBalance {
boolean isBalance=true;
public boolean check(TreeNode root) {
// write code here
// 获得以根结点为头的深度
getHeight(root ,1);
return isBalance;
}
public int getHeight(TreeNode head,int level){
if(head==null){
// 如果当前 head 为空,则返回当前所到达的深度
return level;
}
// 获得以当前 head 为头的左子树深度
int lh=getHeight(head.left,level+1);
// 如果以当前 head 为头的左子树不是 AVL,直接返回当前所到达的深度
if(!isBalance){
return level;
}
// 获得以当前 head 为头的右子树深度
int rh=getHeight(head.right,level+1);
// 如果以当前 head 为头的右子树不是 AVL,直接返回当前所达到的深度
if(!isBalance){
return level;
}
// 比较以当前 head 为头的左子树深度和右子树深度,如果其相差大于 1,则说明以当前 head 为头的二叉树不是 AVL
if(Math.abs(lh-rh)>1){
isBalance=false;
}
// 最后返回当前以 head 为头的深度
return Math.max(lh,rh);
}
}