关于二叉树的创建问题

我想在主函数中先创建一个二叉树,然后再遍历。但我的程序调用CreateBiTree输入完要输入的数之后,还是一直在等待输入,无法停止。以致无法执行到后面的遍历二叉树函数。望高手给解答下!

#include
#include
#include

struct BiTree
{
int data;
struct BiTree *lchild;
struct BiTree *rchild;
};

int CreateBiTree(BiTree *t)
{   
     int ch;
 scanf("%d", &ch);
     if(ch==' ') t = NULL;   
     else 
 {   
         if( !( t=(BiTree*)malloc(sizeof(BiTree))) ) 
 exit(1);
         t->data=ch;   
         CreateBiTree(t->lchild);   
         CreateBiTree(t->rchild);   
     } 
 return 0;
}  

int visit(BiTree *BT)
{
  if(BT!=NULL)
    {
      printf("%d ",BT->data);
      visit(BT->lchild);
      visit(BT->rchild);
    }
  return 0;
}

int main()
{
    BiTree *bitree;
    CreateBiTree(bitree);
visit(bitree);
return 0;
}

  #include<stdio.h>
#include<stdlib.h>
struct BiTree
{
    int data;
    struct BiTree *lchild;
    struct BiTree *rchild;
};
int CreateBiTree(BiTree **t)
{   
    int ch;
    scanf("%d", &ch);
    if(ch==0)
    {
        *t = NULL;
        return 0;
    }
    else 
    {   
        if( !( *t=(BiTree*)malloc(sizeof(BiTree))) ) 
            exit(1);
        (*t)->data=ch;   
        CreateBiTree(&(*t)->lchild);   
        CreateBiTree(&(*t)->rchild);   
    } 
    return 0;
}  
int visit(BiTree *BT)
{
    if(BT!=NULL)
    {
        printf("%d ",BT->data);
        visit(BT->lchild);
        visit(BT->rchild);
    }
    return 0;
}
int main()
{
    BiTree *bitree;
    CreateBiTree(&bitree);
    visit(bitree);
    return 0;
}

有3个问题:
1.CreateBiTree函数里应当在if判断里加入return
2.CreateBiTree传参应该使用一级指针的引用或者二级指针,否则只是主函数里的指针的一个拷贝
3.if(ch == 0)我改成了这样

 #include<stdio.h>
#include<stdlib.h>
struct BiTree
{
    int data;
    struct BiTree *lchild;
    struct BiTree *rchild;
};
int CreateBiTree(BiTree *&t)
{   
    int ch;
    scanf("%d", &ch);
    if(ch==0)
    {
        t = NULL;
        return 0;
    }
    else 
    {   
        if( !( t=(BiTree*)malloc(sizeof(BiTree))) ) 
            exit(1);
        t->data=ch;   
        CreateBiTree(t->lchild);   
        CreateBiTree(t->rchild);   
    } 
    return 0;
}  
int visit(BiTree *BT)
{
    if(BT!=NULL)
    {
        printf("%d ",BT->data);
        visit(BT->lchild);
        visit(BT->rchild);
    }
    return 0;
}
int main()
{
    BiTree *bitree;
    CreateBiTree(bitree);
    visit(bitree);
    return 0;
}

图片说明

递归在这里用有点不适合 ,你不知道他进行到哪步了

不需要在if(ch==0)后加return 你用了if else 最后有return 你的主要问题是你用到了递归,当你输入数据多时你就会无法确定还要输入几个0才结束

我一般是输入一个确定字符串再进行排序 如果你想插入到指定的地方你可以写一个排序的方法书上有