设二叉树的平衡标记balance,以标记返回二叉树bt是否是平衡二叉树。是返回1否则为0.h为bt的高度。
采用后序遍历递归算法:
1)bt为空,高度0,balance=1;
2)仅有根结点,高度1,balance=1;
3)对bt左右子树执行递归,返回 其高度及平衡标记。bt高度为最高子树高度加1。左右子树高度差大于1,balance=0;小于1,且左右均平衡时,balance=1,否则为0;
void Judge_AVL(BiTree bt,int &balance,int &h){
int bl=0,br=0,hl=0,hr=0;
if(bt==NULL){
h=0;
balance=1;
}
else if(bt->lchild==NULL&&bt->rchild==NULL){
h=1;
balance=1;
}
else{
Judge_AVL(b->lchild,bl,hl);//递归判断左子树
Judge_AVL(b->rchild,br,hr);
h=(hl>hr?hl:hr)+1;
if(abs(hl-hr)<2)//子树高度差小于2,看左右子树是否都平衡
balance=bl&&br;//左右都平衡时,二叉树平衡
else
balance=0;
}
}