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

任意给出一棵二叉树,试设计一个程序,在计算机中构造该二叉树,并对它进行中序遍历及线索化。

1.数据结构采用ltag和rtag标志域的二叉链表(线索链表)存储二叉树及线索。

2.输入数据

从键盘输入任意二叉树的前根排序序列,当某结点的左子树或右子树为空时,用“.”代替,输入内容为:

abd. .eh...cf.i..g..

a

b

c

d

e

f

g

h

i

3.输出数据

输出中序线索化后各点所有内容,

:(1)若lchild或rchild域为空,输出时用“-”表示。

(2)lchild域或rchild域的内容用他们所指结点的data域的值表示。

有哪位高手能帮助吗?应为对树真的不懂,太抽象了书上写的不具体好难理解

搜索更多相关主题的帖子: 二叉树 中序 遍历 线索 
2006-05-28 10:17
论坛
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1372
专家分:0
注 册:2006-3-27
收藏
得分:0 

#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 NextNode(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; /* prePtr = previous pointer */

if (*T != NULL)
{
ThreadTree(&(*T) -> lchild); /* thread left tree */
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) -> rchild); /* thread right tree */
}
}

static void PrintThreadTree(Tree curPtr)
{ /* curPtr = current pointer */
while (curPtr -> lchild != NULL)
{
curPtr = curPtr -> lchild; /* search the first print node */
}

while (curPtr != NULL)
{
printf("%c -> ", curPtr -> data);

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

static Tree NextNode(Tree curPtr)
{
if (curPtr -> rtag == 1)
{
return curPtr -> rchild;
}
else
{
curPtr = curPtr -> rchild;
while (curPtr -> ltag != 1)
{
curPtr = curPtr -> lchild;
}

return curPtr;
}
}




日出东方,唯我不败! 做任何东西都是耐得住寂寞,任何一个行业要有十年以上的积累才能成为专家
2006-05-28 11:14
季节的开始
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2006-4-7
收藏
得分:0 
哇。。斑竹好厉害啊!!

This is me~!
2006-05-28 17:21
菜鸟上路
Rank: 4
等 级:贵宾
威 望:14
帖 子:1120
专家分:0
注 册:2006-3-21
收藏
得分:0 
以下是引用季节的开始在2006-5-28 17:21:00的发言:
哇。。斑竹好厉害啊!!

这个在严蔚敏的《数据结构》上有,不过版主确实厉害!


2006-05-28 20:37
快速回复:[求助] 二叉树的中序遍历及线索化
数据加载中...
 
   



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

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