| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 460 人关注过本帖
标题:[求助] 二叉树问题
只看楼主 加入收藏
lujunhuan
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2006-11-30
收藏
 问题点数:0 回复次数:9 
[求助] 二叉树问题

#include "stdio.h"
#include "alloc.h"

struct shu
{
int data;
struct shu *lchild, *rchild;
};
struct shu * grate()
{
struct shu *t;
char ch;
printf ("enter a char\n");
scanf ("%c", &ch);
if (ch==' ')
t=NULL;
else {
t=(struct shu *) malloc (sizeof (struct shu));
t->data=ch;
t->lchild=grate ();
t->rchild=grate ();
}
return t;
}

void print (struct shu *p)
{
if (p==NULL)
printf ("error\n");

else{
printf ("%c", p->data);
print (p->lchild);
print (p->rchild);
}

}

main ()
{
struct shu *t ;
t=grate ();
print (t);
getch ();
}

为什么不能创建二叉树。



搜索更多相关主题的帖子: 二叉树 
2007-01-06 23:51
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 

[CODE]#include "stdio.h"
#include "stdlib.h"
struct shu
{
int data;
struct shu *lchild, *rchild;
};
struct shu * grate()
{
struct shu *t;
char ch;
printf ("enter a char\n");
ch=getchar();
fflush(stdin);//问题出在这里,scanf在读不进空格.

if (ch==' ')
t=NULL;
else {
t=(struct shu *) malloc (sizeof (struct shu));
t->data=ch;
t->lchild=grate ();
t->rchild=grate ();
}
return t;
}
void print (struct shu *p)
{
if (p==NULL);//为了让先序遍历好看点
else{
printf ("%c", p->data);
print (p->lchild);
print (p->rchild);
}
}
main ()
{
struct shu *t ;
t=grate ();
print (t);
return 0;
}[/CODE]


对不礼貌的女生收钱......
2007-01-07 00:20
lujunhuan
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2006-11-30
收藏
得分:0 
怎样输入才能完成创建和输出
2007-01-07 09:08
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 

按照二叉树的先序遍历输入,如
abc####就表示一棵以a为根,bc分别为 a的左右子树.(#表示空格)


对不礼貌的女生收钱......
2007-01-07 09:52
渚薰
Rank: 6Rank: 6
等 级:贵宾
威 望:22
帖 子:1132
专家分:0
注 册:2006-8-6
收藏
得分:0 
终结符最好就是用#或其他特定的字符,不要用空格

个人ajax技术专题站: " target="_blank">http://www. 我不会闲你烦,只会闲你不够烦!
2007-01-07 11:34
lujunhuan
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2006-11-30
收藏
得分:0 

还是不行, 没办法

2007-01-07 19:27
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 
原本是让你输入一个字符换一行的,因为你每次调用都printf了一行。
也就是说abc####得这样输入(#为空格,不过,如5楼版主所说,不提倡用空格,不明显)
a
b
#
#
#
#
如果你要一次都输入完毕,那就把fflush();这句去掉吧.

对不礼貌的女生收钱......
2007-01-07 19:37
ChenMo
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:3
帖 子:481
专家分:10
注 册:2004-4-8
收藏
得分:0 
程序中通过调用grate()来建立树,
树中建立左孩子及又孩子时,也是通过调用grate()函数,
在建立左孩子树时,又要求为下一个左孩子建立(如果输入的是非空格字符)……
如此便构成了一个没法结束的递归调用。

欢迎加入 MVC 技术讨论群(新群:90093426)
2007-01-07 19:38
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 
以下是引用ChenMo在2007-1-7 19:38:45的发言:
程序中通过调用grate()来建立树,
树中建立左孩子及又孩子时,也是通过调用grate()函数,
在建立左孩子树时,又要求为下一个左孩子建立(如果输入的是非空格字符)……
如此便构成了一个没法结束的递归调用。

只有当ch不是空格时才调用,这便是递归的出口。


对不礼貌的女生收钱......
2007-01-07 20:19
lujunhuan
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2006-11-30
收藏
得分:0 
if (ch==' ')-> if (ch=='\n')
每输入一个字母按一次回车,然后按n(字母个数)次回车才输出。
谢谢!

2007-01-07 21:31
快速回复:[求助] 二叉树问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012212 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved