在二叉树节点中存放其平衡因子,平衡因子就是左子树和右子树的高度差,只要平衡因子的绝对值全部小于等于1就是平衡树
#include<iostream> using namespace std; typedef struct Tree { char data; struct Tree *l; struct Tree *r; int yinzi; }tree; int jue(int n) { if(n<0) return -n; } void creat(tree *&p) { char x; cin>>x; if(x=='#')return ; p=new tree; p->data =x; p->l =NULL; p->r =NULL; creat(p->l ); creat(p->r ); } int high(tree *p) //求高度 { if(p==NULL)return 0; else return high(p->l )>=high(p->r )?high(p->l )+1:high(p->r )+1; } void judge(tree *&p,int &flag) { if(p==NULL)return; p->yinzi =high(p->l )-high(p->r ); //左右子树高度差 if(jue(p->yinzi )>1) flag=0; judge(p->l ,flag); judge(p->r ,flag); //递归处理每一个节点 } int main() { tree *t; creat(t); int flag=1; judge(t,flag); if(flag==1)cout<<"yes!"; else cout<<"no!"; return 0; }