二叉树的创建 在线等

来源:百度知道 编辑: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(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);

有个小错误