#include"stdio.h"
#include"stdlib.h"
struct A
{
struct A *left;
struct A *right;
char data;
}*root;
struct A* creat(struct A*);
void xbianli(struct A*);
void zbianli(struct A*);
void hbianli(struct A*);
int main()
{
root=creat(root);
xbianli(root);
zbianli(root);
hbianli(root);
}
struct A* creat(struct A*x)
{
char c;
c=getchar();
if(c!='*')
{
x=(struct A*)malloc(sizeof(struct A));
x->data=c;
x->right=creat(x->right);
x->left=creat(x->left);
}
return x;
}
void xbianli(struct A*w)
{
if(w!=NULL)
{
printf("%c ",w->data);
xbianli(w->left);
xbianli(w->right);
}
}
void zbianli(struct A*c)
{
if(c!=NULL)
{
zbianli(c->left);
printf("%c ",c->data);
zbianli(c->right);
}
}
void hbianli(struct A*v)
{
if(v!=NULL)
{
hbianli(v->left);
hbianli(v->right);
printf("%c ",v->data);
}
}
当我输入ABCD*F*E****** 时,程序并不会停止读入字符,也不会显示我想打印的结果,求大佬帮看看吧
只需添加一句 x=null就行了;
而且我还发现当我按下回车时,若是一次性输入的树不完整,那么程序会一直读取,这时无论输入什么都好像读取不了;若一次性输入完整的树, 那么程序可以运行。
有没有大佬能帮我解释下这个现象。。。。
#include"stdio.h"
#include"stdlib.h"
struct A
{
struct A *left;
struct A *right;
char data;
}*root;
struct A* creat(struct A*);
void xbianli(struct A*);
void zbianli(struct A*);
void hbianli(struct A*);
int main()
{
root=creat(root);
xbianli(root);
zbianli(root);
hbianli(root);
}
struct A* creat(struct A*x)
{
x=null;//在这添加了一句
char c;
c=getchar();
if(c!='*')
{
x=(struct A*)malloc(sizeof(struct A));
x->data=c;
x->right=creat(x->right);
x->left=creat(x->left);
}
return x;
}
void xbianli(struct A*w)
{
if(w!=NULL)
{
printf("%c ",w->data);
xbianli(w->left);
xbianli(w->right);
}
}
void zbianli(struct A*c)
{
if(c!=NULL)
{
zbianli(c->left);
printf("%c ",c->data);
zbianli(c->right);
}
}
void hbianli(struct A*v)
{
if(v!=NULL)
{
hbianli(v->left);
hbianli(v->right);
printf("%c ",v->data);
}
}
你这个方法死循环递归了
二叉树的知识点我也忘了,帮不了你了。