首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

二叉树前序遍历时程序崩溃,该怎么解决

2012-06-08 
二叉树前序遍历时程序崩溃C/C++ code#include stdio.h#include stdlib.htypedef struct bitnode{int d

二叉树前序遍历时程序崩溃

C/C++ code
#include <stdio.h>#include <stdlib.h>typedef struct bitnode{        int data;        struct bitnode *lchild,*rchild;        }bitnode;       void createbitree(bitnode *t){         //前序遍历创建二叉树      char ch;     ch = getchar();     if(ch == '.')           t = NULL;     else{                t = (bitnode *)malloc(sizeof(bitnode));                 t->data = ch;                           //生成根结点;                 createbitree(t->lchild);                //构造左子树;                 createbitree(t->rchild);                //构造右子树;                 }                }                      void preorder(bitnode *t){        //前序遍历显示二叉树     if (t == NULL)     return;     printf("%c",t->data);     preorder(t->lchild);     preorder(t->rchild);     }                    int main(int argc, char *argv[]){  bitnode *t;  createbitree(t);  printf("二叉树已建立\n");   //这一步能正常显示。  preorder(t);        //。。。。。出问题的代码。。。。。。。  system("PAUSE");      return 0;}


编译能通过,也能成功创建二叉树,程序在显示完“二叉树已建立”几秒后程序崩溃,提示“程序已停止工作”。
不知道哪里写错了,请各位指正,谢谢。

[解决办法]
楼主用的啥编译器,printf("二叉树已建立\n");能正常显示?
函数形参不能改变外部实参,除非用双重指针,或者其他方法。
[解决办法]
createbitree(&t);

要注意传二级指针,然后创建的函数内解一次引用再创建,否则建起来的只是以t的拷贝为根的树。而不是以t为根。

[解决办法]
C/C++ code
void createbitree(bitnode **t){         //前序遍历创建二叉树    char ch;    ch = getchar();    if(ch == '.')        *t = NULL;    else{        *t = (bitnode *)malloc(sizeof(bitnode));        (*t)->data = ch;                           //生成根结点;        createbitree(&(*t)->lchild);                //构造左子树;        createbitree(&(*t)->rchild);                //构造右子树;    }}
[解决办法]
顶楼上。。。楼主的这样的做法只是简单的值传递!要用二维指针,进行地址传递!

热点排行