| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 318 人关注过本帖
标题:层次遍历 显示结果总是崩溃。!
只看楼主 加入收藏
一个孩子
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:356
专家分:954
注 册:2012-10-1
结帖率:96.77%
收藏
已结贴  问题点数:20 回复次数:4 
层次遍历 显示结果总是崩溃。!
程序代码:
#include<stdio.h>
#include<stdlib.h>
typedef int Elemtype;
typedef struct BiTNode
{
    Elemtype data;
    struct BiTNode  *lchild,*rchild;
}BiTNode,*BiTree;



typedef struct QNode
{
    BiTree  data;
    struct QNode *next;
}QNode,*QueuePtr;
typedef struct
{
    QueuePtr front;
    QueuePtr rear;
}LinkQueue;

int Init_Queue(LinkQueue &Q)
{
    Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));
    if(!Q.front)
        return 0;
    Q.front->next=NULL;
    return 1;
}
int EnQueue(LinkQueue &Q,BiTree T)
{
    QueuePtr p;
    p=(QueuePtr)malloc(sizeof(QNode));
    if(!p)
        return 0;
    p->data=T;
    p->next=NULL;
    Q.rear->next=p;
    Q.rear=p;
    return 1;
}
int DeQueue(LinkQueue Q,BiTree &T)
{
    QueuePtr p;
    p=(QueuePtr)malloc(sizeof(QNode));
    if(Q.front==Q.rear)
        return 0;
    p=Q.front->next;
    T=p->data;
    Q.front->next=p->next;
    if(Q.rear==p)
    {
        Q.rear=Q.front;
    }
    free(p);
    return 1;

}
int DestroyQueue(LinkQueue &Q)
{
    while(Q.front)
    {
        Q.rear=Q.front->next;
        free(Q.front);
        Q.front=Q.rear;
    }
    return 1;
}
int QueueEmpty(LinkQueue &Q)
{
    if(Q.front==Q.rear)
        return 1;
    else
        return 0;
}



int creat_BiTree(BiTree &T)
{
    int ch;
    ch=getchar();
    if(ch=='#')
        T=NULL;
    else
    {
        T=(BiTree)malloc(sizeof(BiTNode));
        if(!T)
            return 0;
        T->data=ch;
        creat_BiTree(T->lchild);
        creat_BiTree(T->rchild);
    }
    return 1;

}


int HierachyBiTree(BiTree &T)
{
    LinkQueue Q;
    BiTree p;
    Init_Queue(Q);
    if(T==NULL)
        return 0;
    p=T;
    printf("%c ",T->data);
    if(p->lchild)
        EnQueue(Q,p->lchild);
    if(p->rchild)
        EnQueue(Q,p->rchild);
    while(!QueueEmpty(Q))
    {
        DeQueue(Q,p);
        printf("%c ",p->data);
        if(p->lchild)
            EnQueue(Q,p->lchild);
        if(p->rchild)
        {
            EnQueue(Q,p->rchild);
        }
    }
    DestroyQueue(Q);
    putchar(10);
    return 1;

}


层次遍历 ,总是结果不正确,总是崩溃。。主函数只是简单的调用,就一句话。不知道哪里出错了。看了半天没看出来,期待大神的指点!
2012-11-22 17:26
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
收藏
得分:10 
我就一打酱油的菜鸟。。。
    struct BiTNode  *lchild,*rchild;结构体里可以这样做吗??一个成员两根指针。。。
  新手瞎说的啊。。

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2012-11-22 17:34
一个孩子
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:356
专家分:954
注 册:2012-10-1
收藏
得分:0 
int DeQueue(LinkQueue &Q,BiTree &T)//这里出错了,我擦。。LinkQueue &Q 写成了LinkQueue Q  
{
    QueuePtr p;
    p=(QueuePtr)malloc(sizeof(QNode));
    if(Q.front==Q.rear)
        return 0;
    p=Q.front->next;
    T=p->data;
    Q.front->next=p->next;
    if(Q.rear==p)
    {
        Q.rear=Q.front;
    }
    free(p);
    return 1;

}


抽象数据类型里的怎么全是地址传递,值传递的时候总是出错。那位大神给点指点,什么时候用值传递,什么时候用地址传递呢?最好附加实例!!!

重要的不是结果,是求一个结果的过程,哪怕千难万难,当你有想要的结果时,你已走的很远
2012-11-22 17:34
一个孩子
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:356
专家分:954
注 册:2012-10-1
收藏
得分:0 
可以的,你学了数据结构就晓得了。。

重要的不是结果,是求一个结果的过程,哪怕千难万难,当你有想要的结果时,你已走的很远
2012-11-22 17:36
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
收藏
得分:10 
树结构可以有左子树和右子树的

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2012-11-24 07:41
快速回复:层次遍历 显示结果总是崩溃。!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025279 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved