正在学习数据结构,写了一个学生信息二叉树,先序总是出bug,请教一下大家,谢谢~
//二叉树类下的一个成员函数
int PreOrderTraverse(BiTree T){
int i;
BiTree p,q;
LinkStack S;S->data=p;
stack mysta(S);
p=T;
cout<<"学号"<<'\t'<<"姓名"<<endl;
while(p||!mysta.StackEmpty(S)){
while (p){
cout<<p->data.num<<'\t';
for(i=0;i<10;i++){
cout<<p->data.name[i];
}
if(i=10){
cout<<endl;
}
if(!p->rchild) mysta.Push(S,p->rchild);
p=p->lchild;
}
if(!p){cout<<1;
mysta.Pop(S,q);cout<<2;
p=q;cout<<3;//应该是这一步没有赋值成功
}
}
return 1;
}
//stack类里的出栈函数
int Pop(LinkStack &S,BiTree &e){//出栈
if(S==NULL) return ERROR;
e=S->data;
LinkStack p;p=S;
S=S->next;
delete p;
return 1;
}
//主函数
int main(){
student newvalue;
BiTree T,Node[10];
BiT myBiT(T);
int num[]={0,1,2,3,4,5,6,7};
char name[][7]={" ","aa","bb","cc","dd","ee","ff","gg"};
for(int i=1;i<8;i++){
strcpy(newvalue.name,name[i]);
newvalue.num=num[i];
Node[i]=myBiT.MakeNode(newvalue);
}
myBiT.MakeBinaryTree(Node[1],Node[2],Node[3]);//这里树形是这样的: 1
myBiT.MakeBinaryTree(Node[2],Node[4],Node[5]);// 2 3
myBiT.MakeBinaryTree(Node[5],Node[6],Node[7]);// 4 5
//myBiT.MakeBinaryTree(Node[4],NULL,NULL);// 6 7
T=Node[1];
myBiT.PreOrderTraverse(T);
return 0;
}