回 帖 发 新 帖 刷新版面

主题:[讨论]求助一个关于二叉树的问题!!!

#include<stdio.h>
#include<conio.h>
#include<malloc.h>
#define NULL 0

struct BiTNode
{
    char data;
    struct BiTNode *lchild,*rchild;
};
typedef struct BiTNode BiTnode;
typedef struct BiTNode *BiTree;

void CreatBiTree(BiTree T)
{
    char ch;
    printf("\nEnter a char:");
    scanf("%c",&ch);
    if(ch=='#')T=NULL;
    else
        {
            T=(BiTree)malloc(sizeof(BiTnode));
            if(!T)
                {
                    printf("OverFlow");
                    getch();
                    exit(0);
                }
            T->data=ch;
            CreatBiTree(T->lchild);
            CreatBiTree(T->rchild);
        }
}

void Print(BiTree T)
{
    if(T!=NULL)
        {
        printf("\n%s",T->data);
        if(T->lchild!=NULL || T->rchild!=NULL)
        {
          Print(T->lchild);
          Print(T->rchild);
        }
      }
}

void main()
{
    BiTnode bt;
    clrscr();
         CreatBiTree(&bt);
    Print(&bt);
}/*end*/
以上程序有问题吗,为什么它会不停的递归呢?大家帮帮忙看下,谢谢了!

回复列表 (共4个回复)

沙发

因为你没有对二叉树进行初始化,并左右孩子指针初始化为NULL很必要.

板凳

好象不初始化也可以的啊,前面建立栈时就没有,结果还是可以的啊?

3 楼

status createbitree(bitree &t){
    char ch;
    ch=getchar();
    if(ch=='#')
    {   t=null;
        return error;
    }
    else {
        t=(bitree)malloc(sizeof(bitnode));
        t->data=ch;
        createbitree(t->lchild);
        createbitree(t->rchild);
    }
    return ok;
}
我这样写就没事阿

4 楼

#define NULL 0

struct BiTNode
{
char data;
    struct BiTNode *lchild,*rchild;
};
typedef struct BiTNode BiTnode;
typedef struct BiTNode *BiTree;

BiTree CreatBiTree()
{
BiTree T;
char ch;
    printf("\nEnter a char :");
    scanf("%c",&ch);
getchar();
    if(ch=='#')T=NULL;
    else
        {
            T=(BiTree)malloc(sizeof(BiTnode));
            if(!T)
                {
                    printf("OverFlow");
                    getch();
             
                }
            T->data=ch;
            T->lchild=CreatBiTree();
            T->rchild=CreatBiTree();
        }
    return T;
}
void Print(BiTree T)
{
    if(T!=NULL)
        {
        printf("%c\t",T->data);
        
    
          Print(T->lchild);
          Print(T->rchild);
        
      }
}



void main()
{
    BiTree bt;

         bt=CreatBiTree();
         printf("create success!\n");

    Print(bt);
}
帮你改过了,不知道你满意不??
呵呵!!
你特别要注意的是在你按回车键的时候也是一个字符,所以要用.getchar()把他吃掉.
下面的遍历函数你的也有点问题.

我来回复

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