我想在主函数中先创建一个二叉树,然后再遍历。但我的程序调用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才结束
我一般是输入一个确定字符串再进行排序 如果你想插入到指定的地方你可以写一个排序的方法书上有