回 帖 发 新 帖 刷新版面

主题:帮忙看下这个出了什么问题

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

typedef struct bnote
{

    char data;
    struct bnote *lchild,*rchild;
 
}bitree;
/*生成二叉树:用递归构造二叉树*/
bitree *CreatTree()
{
       
    bitree *t;
    char ch;
    scanf("%c",&ch);
    if(ch==' ') t==NULL;
    else
    {
        
         t = (bitree*)malloc(sizeof(bitree));  //生成根结点 
         t->data = ch;
         t->lchild = CreatTree();             //生成左孩子 
         t->rchild = CreatTree();            //生成右孩子 
        
    }
    
    return t;                   //返回结点 
  
}
/*遍历二叉树:用后序递归遍历法*/
void ReadTree(bitree *bt)
{
     
     if(bt)                    //如结点非空 
     {
        
        //if(bt->lchild!=NULL)[color=FF0000] 
        /*为什么每次调试的时候这里都会出现段异常呀?实在不理解 */
            ReadTree(bt->lchild);   //访问左孩子 [/color]
        //if(bt->rchild!=NULL)  
            ReadTree(bt->rchild);     //访问右孩子 
        printf("%c\n",bt->data);
          
             
     }
  
}
int main(void)
{
  
    bitree *bt;
    bt = CreatTree();       //生成二叉树 
    ReadTree(bt);            //遍历二叉树 
    
    free(bt);
    printf("over");
    system("pause");
    return 0;   
     
}

回复列表 (共9个回复)

沙发

递归后序遍历 不知道你的异常是什么情况?

另外你的free只是free掉了一个树节点而已,还有很多节点没有释放

板凳

if(ch==' ') t==NULL;

注意creat函数里的这句,像是多了一个=

为什么非要用create函数来建立一个树?
直接编个函数来创立一个现成的树不就好了

3 楼

答对问题记得加点分,给好心人一个回应.

4 楼

看了半天,这里有个小问题:
if(ch==' ') t==NULL;
应该是 
if(ch==' ') t=NULL;
多了一个等号.

5 楼

粗心了点~~实在麻烦大家了~~t==NULL这个错了~~~谢谢大家啊

6 楼

[quote]为什么非要用create函数来建立一个树?
直接编个函数来创立一个现成的树不就好了[/quote]还不知道怎么做~~

PS:我现在晚上才能去网吧上,家里的没网线啦~~~所以回复晚了点~~实在抱歉啊

7 楼

http://www.aurora.dti.ne.jp/~m-tamaki/Univ/Info02First/Algorithm/Tree/index.html

google到一个日语网页,虽然日语我不懂
但是网页上的图和代码都比较清楚
另外最后的main函数提供了一个树,楼主可用来练习

另外google到一个加拿大的网站有比较生动的三序遍历二叉树的图片
http://www.cs.usask.ca/resources/tutorials/csconcepts/1998_6/bintree/2-2.html

8 楼

3Q

9 楼

用递归,比较好容易理解,也不会容易出错
t==NULL
真是不该有的错误啊

我来回复

您尚未登录,请登录后再回复。点此登录或注册