| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付买域名,送MP3、MP4
高端软件开发 = 年薪十万不是梦赛孚耐:软件保护加密专家身份认证令牌USB KEY买空间,免费送域名(厦门中资源)
共有 688 人关注过本帖
标题:[求助]前序线索二叉树问题!
收藏  订阅  推荐  打印 
论坛
Rank: 6Rank: 6
等级:金牌会员
威望:6
帖子:1375
积分:13850
注册:2006-3-27
[求助]前序线索二叉树问题!

下面是前序线索二叉树程序,程序现在出现死问题,当输入"ab///"('/'代表空树)时,不打印任何元素,倒,谁看看怎么回事,是线索函数错了,还是打印函数错了

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

typedef struct node
{
char data;
struct node *lchild, *rchild;
int ltag, rtag;
}*Tree, Tnode; /* 二叉树结构 */

static void CreateTree(Tree *T); /* 创建二叉树 */
static void ThreadTree(Tree *T); /* 前序线索二叉树 */
static void PrintThreadTree(Tree T); /* 打印线索二叉树 */
static Tree NextPtr(Tree curPtr); /* 找下一个结点 */

int main(void)
{
Tree T = NULL;

CreateTree(&T);

ThreadTree(&T);

PrintThreadTree(T);

getch();
return 0;
}

static void CreateTree(Tree *T)
{
int ia;

ia = getchar();

if (ia == '/') /* 空树 */
{
*T = NULL;
}
else
{
if (((*T) = (Tree)malloc(sizeof(Tnode))) == NULL)
{
exit(1);
}
(*T) -> data = ia;
(*T) -> lchild = (*T) -> rchild = NULL;

CreateTree(&(*T) -> lchild);
CreateTree(&(*T) -> rchild);
}
}

static void ThreadTree(Tree *T) /* 前序线索二叉树 */
{
static Tree prePtr = NULL;

if (*T)
{
if ((*T) -> lchild == NULL) /* 确定左线索标志 */
{
(*T) -> ltag = 1;
}
if ((*T) -> rchild == NULL) /* 确定右线索标志 */
{
(*T) -> rtag = 1;
}
if (prePtr -> rtag == 1) /* 前驱线索化 */
{
prePtr -> rchild = *T;
}
if ((*T) -> ltag == 1) /* 后继线索化 */
{
(*T) -> lchild = prePtr;
}
prePtr = *T;

ThreadTree(&(*T) -> lchild);
ThreadTree(&(*T) -> rchild);
}
}

static void PrintThreadTree(Tree curPtr) /* 打印线索二叉树 */
{
while (curPtr) /* 首先打印根结点,然后依次找下一个结点 */
{
printf("%c -> ", curPtr -> data);

curPtr = NextPtr(curPtr);
}
printf("NULL\n");
}

static Tree NextPtr(Tree curPtr) /* 查找下一结点 */
{
if (curPtr -> ltag != 1) /* 有左子树返回左子树 */
{
return curPtr -> lchild;
}
else /* 否则返回右子树 */
{
return curPtr -> rchild;
}
}

结构不太好,用TC写的












[此贴子已经被作者于2006-5-23 21:17:31编辑过]

搜索更多相关主题的帖子: 二叉树  线索  
2006-5-23 21:14
独角龙
Rank: 3Rank: 3
等级:中级会员
帖子:221
积分:2310
注册:2006-5-5





不会!

奋斗改变一切!!
2006-5-23 21:17
SunShining
Rank: 12Rank: 12Rank: 12
等级:贵宾
威望:31
帖子:2215
积分:22350
注册:2006-2-17

你确信它有先序的线索排法吗??

1
2 3
4 5 6

先序为 1 2 4 3 5 6

请你画出它的线索..

[此贴子已经被作者于2006-5-23 22:11:49编辑过]


[glow=255,violet,2]闭关修炼ing...[/glow] [FLASH=360,180]http://www.chinaren.com/chinaren.swf[/FLASH]
2006-5-23 22:11
论坛
Rank: 6Rank: 6
等级:金牌会员
威望:6
帖子:1375
积分:13850
注册:2006-3-27

我不知道有没有啊,书上只有中序,我想有中序就应该有先序啊,那有没有后序啊

日出东方,唯我不败! 做任何东西都是耐得住寂寞,任何一个行业要有十年以上的积累才能成为专家
2006-5-23 22:29
论坛
Rank: 6Rank: 6
等级:金牌会员
威望:6
帖子:1375
积分:13850
注册:2006-3-27

差不多吧,2右指向4,4左指向2,4右指向3,5左指向3,5右指向6,6左指向5啊

日出东方,唯我不败! 做任何东西都是耐得住寂寞,任何一个行业要有十年以上的积累才能成为专家
2006-5-23 22:33
论坛
Rank: 6Rank: 6
等级:金牌会员
威望:6
帖子:1375
积分:13850
注册:2006-3-27

以下是引用SunShining在2006-5-23 22:11:00的发言:
你确信它有先序的线索排法吗??

1
2 3
4 5 6

先序为 1 2 4 3 5 6

请你画出它的线索..

应该能啊

[此贴子已经被作者于2006-5-23 22:36:04编辑过]


日出东方,唯我不败! 做任何东西都是耐得住寂寞,任何一个行业要有十年以上的积累才能成为专家
2006-5-23 22:34
SunShining
Rank: 12Rank: 12Rank: 12
等级:贵宾
威望:31
帖子:2215
积分:22350
注册:2006-2-17

很明显..按我上面的说法..给其按先序加线索后..根结点并没有被任何线索连接.

也就是说只能遍历出根结点..后面则无法遍历.

我改过我的后..是可以输出结点的.不是死的..不过.结果是错误的.

至于后序..你得试验各种排列的后序加线索.看看有没有断开没有加上线索的.

[glow=255,violet,2]闭关修炼ing...[/glow] [FLASH=360,180]http://www.chinaren.com/chinaren.swf[/FLASH]
2006-5-23 22:36
SunShining
Rank: 12Rank: 12Rank: 12
等级:贵宾
威望:31
帖子:2215
积分:22350
注册:2006-2-17

以下是引用论坛在2006-5-23 22:33:00的发言:
差不多吧,2右指向4,4左指向2,4右指向3,5左指向3,5右指向6,6左指向5啊

有根相连吗???小子..改的蛮快啊..居然说我的先序排错了..我还不至于那么BC..呵呵


[glow=255,violet,2]闭关修炼ing...[/glow] [FLASH=360,180]http://www.chinaren.com/chinaren.swf[/FLASH]
2006-5-23 22:38
论坛
Rank: 6Rank: 6
等级:金牌会员
威望:6
帖子:1375
积分:13850
注册:2006-3-27

以下是引用SunShining在2006-5-23 22:38:00的发言:

有根相连吗???小子..改的蛮快啊..居然说我的先序排错了..我还不至于那么BC..呵呵

开始没看清,看成123456了


日出东方,唯我不败! 做任何东西都是耐得住寂寞,任何一个行业要有十年以上的积累才能成为专家
2006-5-23 22:39
SunShining
Rank: 12Rank: 12Rank: 12
等级:贵宾
威望:31
帖子:2215
积分:22350
注册:2006-2-17

是不是没有根..所以它的排不出的..教材没告诉吗?

我也忘了教材说了没..这是以前看的..我去找找书

[glow=255,violet,2]闭关修炼ing...[/glow] [FLASH=360,180]http://www.chinaren.com/chinaren.swf[/FLASH]
2006-5-23 22:41
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.056352 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved