#include <iostream>
#include <stdlib.h>
using namespace std;
typedef struct Binode{
char data;
Binode *lchild,*rchild;
}Binode,*Bitree;
void creatBitree(Bitree &T){ //构造二叉树,前序构造
char ch;
cin>>ch;
if(ch=='#'){
T=NULL;
}else{
T=(Bitree)malloc(sizeof(Binode));
T->data=ch;
creatBitree(T->lchild);
creatBitree(T->rchild);
}
}
/*
平衡二叉树 当前节点(注意一定得是当前节点) 左,右子树的高度差不能超过 1
因此需要获得子树的高度
BitHigh(T);//递归的方式,获得子树的高度
*/
int BitreeHigh(Bitree T){
int lhigh,rhigh;
if(T){
lhigh=BitreeHigh(T->lchild)+1;//左子树
rhigh=BitreeHigh(T->rchild)+1;//右子树
return lhigh>rhigh?lhigh:rhigh;//返回较大的数,即该子树的高度
}else{
return 0;
}
}
int judgeBalance(Bitree T){ // 1是平衡二叉树,0不是平衡二叉树
if(T==NULL)
return 1;
int right=BitreeHigh(T->rchild);//当前节点右子树的高度
int left=BitreeHigh(T->lchild);//当前节点左子树的高度
int gap=right-left;//左右子树的高度差
if(gap>1||gap<-1)
return 0;
return judgeBalance(T->lchild)&&judgeBalance(T->rchild);//遍历所有节点的平衡因子
}
int main(){
Bitree T;
creatBitree(T);
cout<<judgeBalance(T);
return 0;
}
12-08