sinat_24091517 2016-05-05 04:55 采纳率: 36.4%
浏览 1159
已采纳

为什么产生垃圾值啊 ,哪里错了 。为什么。

include
#include
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==132) 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;
BiTNode *p;
p=T;
Init_StackL(&S);

while(p||StackEmpty(&S)){
if(p){Push_L(&S,p);p=p->lchild; printf("%d",p->data);
}
else{
Pop_L(&S,&p);
if(p->data) return 0;
p=p->rchild;
}
}
return 1;
}

void main()
{
BiTNode T;
CreateBiTree(&T);
InOrderTraverse(&T);
system("pause");
}

  • 写回答

1条回答 默认 最新

  • 小灸舞 2016-05-05 07:02
    关注

    问题1:
    你的CreateBiTree有问题,传一级指针是没有用的,根本没法改变指针的指向,操作的只是指针的拷贝
    要传二级指针或者一级指针的引用才行
    问题2:InOrderTraverse函数内p=p->lchild; printf("%d",p->data);这两句需要交换位置
    不然如果p->lchild等于NULL了,你直接访问p->data会崩

     #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==132) *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;
        BiTNode *p;
        p=T;
        Init_StackL(&S);
        while(p||StackEmpty(&S)){
            if(p){
                Push_L(&S,p);
                printf("%d",p->data);
                p=p->lchild; 
    
            }
            else{
                Pop_L(&S,&p);
                if(p->data) return 0;
                p=p->rchild;
            }
        }
        return 1;
    }
    void main()
    {
        BiTNode *T;
        CreateBiTree(&T);
        InOrderTraverse(T);
        system("pause");
    }
    

    图片说明

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 MATLAB怎么通过柱坐标变换画开口是圆形的旋转抛物面?
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿