先序便利创建二叉树的问题

纯净水o 2009-09-24 06:13:09
#include<stdio.h>
#include<stdlib.h>
#define TREESIZE 50
typedef struct bitree
{
char data;
struct bitree *light,*right;
}bitree;
bitree *createbitree(char *p);
void putbitree(bitree *t);
main()
{
char *p =(char *)malloc(TREESIZE*sizeof(char));
bitree *t;
t = NULL;
printf("按照先序输入树的结点,回车结束输入\n");
scanf("%s",p);
t = createbitree(p);
putbitree(t);
}
bitree *createbitree(char *p)
{
bitree *t;
t=NULL;
if(*p != '0' && *p)
{
t = (bitree *)malloc(sizeof(bitree));
t->data = *p;
t->light = *(p+1) ? createbitree(++p) : NULL;
t->right = *(p+1) ? createbitree(++p) : NULL;
}
return(t);
}
void putbitree(bitree *t)
{
if(t)
{
printf("%c",t->data);
putbitree(t->light);
putbitree(t->right);
}
else
printf("0");
}



运行结果错误
主要就是
bitree *createbitree(char *p)
{
bitree *t;
t=NULL;
if(*p != '0' && *p)
{
t = (bitree *)malloc(sizeof(bitree));
t->data = *p;
t->light = *(p+1) ? createbitree(++p) : NULL;
t->right = *(p+1) ? createbitree(++p) : NULL;
}
return(t);
}
这一段函数,造成了创建二叉树错误,很纳闷的错误,比如说按我输入asd按照程序的愿意当输入完成d的时候p+1就是'\0'也就是说当穿件玩最后一个接点的时候就不应该再继续创建接点了 但是令我奇怪的是 输出二叉树的结果竟然是asd000d00
(0代表空节点)竟然会出现2个d实在找不出原因 还请大家帮忙啊
...全文
155 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
chj_2003 2009-09-29
  • 打赏
  • 举报
回复
只有先序遍历,构造出的二叉树是不唯一的。输入时,你没有判断d是左子树,还是右子树。
chj_2003 2009-09-29
  • 打赏
  • 举报
回复
只有先序遍历,构造出的二叉树是不唯一的

33,028

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧