题目描述
编写程序判断给定的二叉树是否是平衡二叉树。
输入
二叉树的先序序列。
输出
如果是平衡二叉树,输出yes!,否者输出no!
样例输入
AB##C##
样例输出
yes!
平衡二叉树(Balanced Binary Tree),具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
#include<bits/stdc++.h>
#define ll long long
//#define int ll
#define pii pair<int,int>
#define mem(a,b) memest(a,b,sizeof(a))
#define endl '\n'
#define N 100005
const int inf=0x3f3f3f3f;
const double pi=acos(-1.0);
using namespace std;
int c=0;
int sum[N],co=-1;
typedef struct TNodes//定义二叉树
{
char data;
TNodes *lnode,*rnode;
}*TNode;
void CreatTree(TNode &t)
{
char c;
cin>>c;
if(c=='#') t=NULL;
else
{
t=new TNodes;
t->data=c;
CreatTree(t->lnode);
CreatTree(t->rnode);
}
}
int h(TNode &t)
{
if(!t) return 0;
else return h(t->lnode)>h(t->rnode)?h(t->lnode)+1:h(t->rnode)+1;
}
bool balance(TNode &t)
{
if(!t) return 1;
int l,r;
l=h(t->lnode);
r=h(t->rnode);
if(abs(l-r)>1) return 0;
return balance(t->lnode)&&balance(t->rnode);
}
int main()
{
TNode t;
CreatTree(t);
if(balance(t)) cout<<"yes!";
else cout<<"no!";
return 0;
}