开发者社区> 问答> 正文

这个二叉树的遍历生成哪里错了?报错的地方已经标注。?报错

#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");
}

展开
收起
爱吃鱼的程序员 2020-06-09 14:52:05 443 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    <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下就不报错了打印确实产生垃圾值。我在修改一下。

    2020-06-09 15:31:19
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载