何为平衡二叉树:任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。
#include<iostream>
#include<cstdlib>
using namespace std;
typedef struct shu
{
char data;
struct shu *rc,*lc;
}BT;
char *ch;
char str[100];
void create(BT *&t)
{
if(*ch++=='#')
t=NULL;
else
{
t=(BT*)malloc(sizeof(BT));
t->data=*(ch-1);
create(t->lc);
create(t->rc);
}
}
int heigh(BT *t)
{
int lc,rc;
if(t==NULL)
return 0;
else
{
lc=heigh(t->lc);
rc=heigh(t->rc);
return (lc>rc)?(lc+1):(rc+1);
}
}
int isBlance(BT *t)
{
if(t==NULL)
return 1;
int d=heigh(t->lc)-heigh(t->rc);
if ( (d < -1) || ( d > 1))
return 0 ;
else
return (isBlance(t->lc) && isBlance(t->rc));
}
int main()
{
char str[100];
cin>>str;
ch=str;
BT *t;
create(t);
if(isBlance(t))
cout<<"yes!";
else
cout<<"no!";
return 0;
}