发现程序有问题,问题在d1>d2?d1:d2+1上'+'的优先级高于':',所以应该改为(d1>d2?d1:d2)+1
//是否为平衡二叉树
#include <iostream>
#include <stack>
using namespace std;
struct node{
node *lchild,*rchild;
int value;
};
class list{
public:
list();
int depth(node* p);
void InOrder();
void balance();
private:
node* root;
};
void list::InOrder()
{
if(NULL==root)
return;
stack<node*> s;
node* curr=root;
while(1){
while(curr){
s.push(curr);
curr=curr->lchild;
}
if(s.empty())
break;
curr=s.top();
s.pop();
cout<<curr->value<<'\t';
curr=curr->rchild;
}
}
void list::balance()
{
depth(root);
cout<<"平衡"<<endl;
}
int list::depth(node* p)
{
if(NULL==p)
return 0;
int d1,d2;
d1=depth(p->lchild);
d2=depth(p->rchild);
if((d1-d2)>1 || (d2-d1)>1){
cout<<"不平衡"<<endl;
system("pause");
exit(-1);
}
return d1>d2?d1:d2+1;
}
list::list()
{
cout<<"请输入您想要输入的数字,按'#'键结束:"<<endl;
int i;
if(cin>>i==NULL)
return;
root=new node;
root->value=i;
root->lchild=NULL;
root->rchild=NULL;
node *p,*q;
while(cin>>i){
p=new node;
p->value=i;
p->lchild=NULL;
p->rchild=NULL;
q=root;
while(1){
if(p->value<q->value){
if(NULL==q->lchild){
q->lchild=p;
break;
}
q=q->lchild;
}
else if(p->value>q->value){
if(NULL==q->rchild){
q->rchild=p;
break;
}
q=q->rchild;
}
}
}
}
void main()
{
list test;
//test.InOrder();
test.balance();
system("pause");
}