问题描述
- 这个程序是二叉树的先序遍历的非递归算法,请问哪里错了????急求
-
#include
using namespace std;
//=================================
struct BiTNode
{
char data;
BiTNode *lchild,*rchild;
};
//=====================================
struct SNode
{
BiTNode *Sdata;
SNode *next;
};
SNode *S;
//============================================
void InitStack(SNode *&S)
{
S=new SNode;
S->next=NULL;
}
//===================================
bool EmptyStack(SNode *&S)
{
if(S->next=NULL)
return true;
else
return false;}
//============================================
void push(SNode *&S,BiTNode *e)
{
SNode *p=new SNode;
p->next=NULL;
p->Sdata=e;
p->next=S->next;
S->next=p;
}
//========================================
void pop(SNode *&S,BiTNode *&e)
{
if(S->next==NULL)
{
cout<<"栈空,结束程序"<<endl;
exit(1);
}SNode *p=new SNode; p->next=NULL; p=S->next; e=p->Sdata; S->next=p->next;
// delete p;
}
//=============================================
void Createbt(BiTNode *&T)
{
char c;
cin>>c;
if(c=='#')
{
T=NULL;
return;
}
else
{
T=new BiTNode;
if(!T)
{
cout<<"内存分配出错"<
exit(1);//程序结束
}
T->data=c;
Createbt(T->lchild);
Createbt(T->rchild);
}
}
//========================================================
void InorderTraverse(BiTNode *&T)
{
//SNode *S;
InitStack(S);
//BiTNode *p=new BiTNode;
BiTNode *p=T;
while(p||!EmptyStack(S))
{
if(p){
push(S,p);
p=p->lchild;
}
else
{
pop(S,p);
cout<data<<" ";
p=p->rchild;
}
}
}
//=========================================
void InOrder(BiTNode *T)
{
if(T==NULL)
return;
InOrder(T->lchild);
cout<data<<" ";
InOrder(T->rchild);
}
//=======================================================
int main()
{
BiTNode *T;
cout<<"请按照先序序列输入各结点所存储的元素"<<endl;
Createbt(T);
InOrder(T);
cout<<endl;
InorderTraverse(T);
return 1;
}
解决方案
#include
using namespace std;
//=================================
struct BiTNode
{
char data;
BiTNode *lchild,*rchild;
};
//=====================================
struct SNode
{
BiTNode *Sdata;
SNode *next;
};
SNode *S;
//============================================
void InitStack(SNode *&S)
{
S=new SNode;
S->next=NULL;
}
//===================================
bool EmptyStack(SNode *&S)
{
if(S->next=NULL)
return true;
else
return false;
}
//============================================
void push(SNode *&S,BiTNode *e)
{
SNode *p=new SNode;
p->next=NULL;
p->Sdata=e;
p->next=S->next;
S->next=p;
}
//========================================
void pop(SNode *&S,BiTNode *&e)
{
if(S->next==NULL)
{
cout<<"栈空,结束程序"<<endl;
exit(1);
}
SNode *p=new SNode;
p->next=NULL;
p=S->next;
e=p->Sdata;
S->next=p->next;
// delete p;
}
//=============================================
void Createbt(BiTNode *&T)
{
char c;
cin>>c;
if(c=='#'||c=='0')
{
T=NULL;
return;
}
else
{
T=new BiTNode;
if(!T)
{
cout<<"内存分配出错"<
exit(1);//程序结束
}
T->data=c;
Createbt(T->lchild);
Createbt(T->rchild);
}
}
//========================================================
void InorderTraverse(BiTNode *&T)
{
//SNode *S;
InitStack(S);
//BiTNode *p=new BiTNode;
BiTNode *p=T;
while(p||!EmptyStack(S))
{
if(p){
push(S,p);
p=p->lchild;
}
else
{
pop(S,p);
cout<data<<" ";
p=p->rchild;
}
}
}
//=========================================
void InOrder(BiTNode *T)
{
if(T==NULL)
return;
InOrder(T->lchild);
cout<data<<" ";
InOrder(T->rchild);
}
//=======================================================
int main()
{
BiTNode *T;
cout<<"请按照先序序列输入各结点所存储的元素"<<endl;
Createbt(T);
InOrder(T);
cout<<endl;
InorderTraverse(T);
return 1;
}
我改了void Createbt(BiTNode *&T)里的第三行,void InOrder(BiTNode *T)里的第4行,cout<<"内存分配出错"< exit(1);//程序结束 这里,还有第一行