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

下面是前序线索二叉树程序,程序现在出现死问题,当输入"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-05-23 21:14
论坛
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1372
专家分:0
注 册:2006-3-27
收藏
得分:0 
我不知道有没有啊,书上只有中序,我想有中序就应该有先序啊,那有没有后序啊

日出东方,唯我不败! 做任何东西都是耐得住寂寞,任何一个行业要有十年以上的积累才能成为专家
2006-05-23 22:29
论坛
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1372
专家分:0
注 册:2006-3-27
收藏
得分:0 
差不多吧,2右指向4,4左指向2,4右指向3,5左指向3,5右指向6,6左指向5啊

日出东方,唯我不败! 做任何东西都是耐得住寂寞,任何一个行业要有十年以上的积累才能成为专家
2006-05-23 22:33
论坛
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1372
专家分:0
注 册:2006-3-27
收藏
得分:0 
以下是引用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-05-23 22:34
论坛
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1372
专家分:0
注 册:2006-3-27
收藏
得分:0 
以下是引用SunShining在2006-5-23 22:38:00的发言:

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

开始没看清,看成123456了


日出东方,唯我不败! 做任何东西都是耐得住寂寞,任何一个行业要有十年以上的积累才能成为专家
2006-05-23 22:39
论坛
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1372
专家分:0
注 册:2006-3-27
收藏
得分:0 
要啊,我在啊

日出东方,唯我不败! 做任何东西都是耐得住寂寞,任何一个行业要有十年以上的积累才能成为专家
2006-05-24 21:57
快速回复:[求助]前序线索二叉树问题!
数据加载中...
 
   



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

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