二叉树的创建 在线等
来源:百度知道 编辑:UC知道 时间:2024/05/29 03:49:47
请给我看下,我下面的创建错在哪了,哪里不对了?
#include <stdio.h>
#include <stdlib.h>
struct TREE
{
char data;
struct TREE *lsubtree;
struct TREE *Rsubtree;
};
struct TREE *tree,*p;
void createtree(p)
{
char ch;
ch=getchar();
if(ch=='\n')
return;
else if(ch=='.')
tree=NULL;
else
{
tree=(struct TREE*)malloc(sizeof(struct TREE));
tree->data=ch;
creatrtree(tree->lsubtree);
creatrtree(tree->Rsubtree);
}
}
void main()
{
createtree(tree);
return ;
}
那 我改了,也一样是有问题啊,运行不了
啊晕,都运行不了啊,哪个给改一下能正确运行啊
#include <stdio.h>
#include <stdlib.h>
struct TREE
{
char data;
struct TREE *lsubtree;
struct TREE *Rsubtree;
};
struct TREE *tree,*p;
void createtree(p)
{
char ch;
ch=getchar();
if(ch=='\n')
return;
else if(ch=='.')
tree=NULL;
else
{
tree=(struct TREE*)malloc(sizeof(struct TREE));
tree->data=ch;
creatrtree(tree->lsubtree);
creatrtree(tree->Rsubtree);
}
}
void main()
{
createtree(tree);
return ;
}
那 我改了,也一样是有问题啊,运行不了
啊晕,都运行不了啊,哪个给改一下能正确运行啊
#include <stdio.h>
#include <stdlib.h>
struct TREE
{
char data;
struct TREE *lsubtree;
struct TREE *Rsubtree;
};
struct TREE *tree,*p;
void createtree(struct TREE *&p) //单指针不会修改p,故加上引用
{
char ch;
ch=getchar();
if(ch=='\n')
return;
else if(ch=='.')
p=NULL;
else
{
p=(struct TREE*)malloc(sizeof(struct TREE));
p->data=ch;
createtree(p->lsubtree); //用参数p,不要用全局的tree
createtree(p->Rsubtree);
}
}
void main()
{
createtree(tree);
return ;
}
if(ch=='\n')
return;
按回车才能处罚getchar的结果,而你这里在监视回车,会因监视不到而形成死循环
create函数放回tree
creatrtree(tree->lsubtree);
creatrtree(tree->Rsubtree);
改成
tree->lsubtree=creatrtree(tree->lsubtree);
tree->lsubtree=creatrtree(tree->Rsubtree);
有个小错误