问题描述
- 关于二叉树的创建问题
-
我想在主函数中先创建一个二叉树,然后再遍历。但我的程序调用CreateBiTree输入完要输入的数之后,还是一直在等待输入,无法停止。以致无法执行到后面的遍历二叉树函数。望高手给解答下!#include
#include
#includestruct?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;
}
解决方案二:
二叉树的创建的内存问题
二叉树创建时的一个问题
c# 二叉树的创建和各种问题
解决方案三:
有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才结束
我一般是输入一个确定字符串再进行排序 如果你想插入到指定的地方你可以写一个排序的方法书上有
解决方案五:
递归在这里用有点不适合 ,你不知道他进行到哪步了