#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef int Status;
typedef struct BiTNode{
ElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode ,*BiTree;
typedef BiTree pElemType;
typedef struct Snode
{
pElemType data;
struct Snode *next;
}Snode,*LinkStack;
Status CreateBiTree(BiTNode *T)
{
int ch;
scanf("%d",&ch);
if(ch==' ') T=NULL;
else{
if(!(T=(BiTNode *)malloc(sizeof(BiTNode))))exit(0);
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
return 1;
}
void Init_StackL(LinkStack *S)
{
*S=NULL;
}
Status Push_L(LinkStack *S,pElemType x)
{
LinkStack p;
p=(LinkStack)malloc(sizeof(Snode));
p->data=x;
p->next=*S;
*S=p;
return 1;
}
Status Pop_L(LinkStack *S,pElemType *temp_)
{
LinkStack p;
pElemType temp;
if(*S==NULL) return 0;
temp=(*S)->data;
p=*S;
*S=p->next;
free(p);
*temp_=temp;
return 1;
}
Status StackEmpty(LinkStack *S)
{
if(*S==NULL) return 0;
else
return 1;
}
Status InOrderTraverse(BiTNode *T)
{
LinkStack S;
Init_StackL(&S);
BiTNode *p=T;/这一行开始报错/
while(p||StackEmpty(&S)){
if(p){Push_L(&S,p);p=p->lchild;}
else{
Pop_L(&S,&p);
p=p->rchild;
}
}
return 1;
}
void main()
{
BiTNode T;
CreateBiTree(&T);
InOrderTraverse(&T);
system("pause");
}
<spanstyle="font-family:幼圆,Verdana,sans-serif,宋体;font-size:14px;line-height:22px;background-color:#FFFFFF;">CreateBiTree(&T);这里就已经出错了,你传递的指针重新赋值了,所以根据你的函数最后获取的T压根没有值或者是随意的一个值,不信你可以打印试试<spanstyle="font-family:幼圆,Verdana,sans-serif,宋体;font-size:14px;line-height:22px;background-color:#FFFFFF;">,你要不传递<spanstyle="font-family:幼圆,Verdana,sans-serif,宋体;font-size:14px;line-height:22px;background-color:#FFFFFF;">BiTNode的二级指针要不用引用<spanstyle="font-family:幼圆,Verdana,sans-serif,宋体;font-size:14px;line-height:22px;background-color:#FFFFFF;">,顺便说一句,别人起别名是为了好用,你起别名反而更难用了,干嘛要把类型和类型的指针分开命名,看一会我就乱了
回复<aclass='referer'target='_blank'>@奔跑的码农:这和环境什么的都有关系,而且不同的编译器对这些脏值的处理还都不一样,建议你用C++吧,这些问题出现的比较明显Init_StackL(&S);BiTNode*p=T;/这一行开始报错/有个奇怪的问题,这两行交换位置在Turbo2.0下就不报错了打印确实产生垃圾值。我在修改一下。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。