数据结构之线索二叉树(整理严蔚敏数据结构)

线索二叉树是一种特殊的数据结构,用于方便二叉树的遍历。创建线索二叉树包括PreCreate()、InThread()和InOrderThread()三个步骤。PreCreate()按先序方式建立结点并赋值;InThread()通过添加线索标签和连接空指针实现中序线索化;InOrderThread()进一步将头结点和中序遍历的末尾结点连接,完善遍历链。
摘要由CSDN通过智能技术生成

线索二叉树可以这样理解:
   1.   PreCreate(): 对于线索二叉树的先序创建过程和一般二叉树的先序创建没有区别(都是建立结点,然后结点赋值)

   2.InThread():中序线索化的过程就是在1.中创建的基础上贴上标签(即给Tag赋值)和给所有的空指针域赋值(中序顺序串起来).

   3.InOrderThread():函数只是用来在2的基础上串上头结点以及对中序遍历的最后一个结点和头结点进行很好的契合.

   4.以上三个函数的契合才是完成一个真正意义上的线索二叉树的创建.



#include<iostream>
using namespace std;

typedef char ElemType;
typedef enum { Link, Thread }PointType;
typedef struct BThrNode
{
	ElemType data;
	struct BThrNode *pLchild, *pRchild;
	PointType LTag, RTag;
}BThrNode, *pBThrNode;

void PreCreate(pBThrNode &pT)
{
	ElemType c;
	cin >> c;
	if (c == '#')
		pT = NULL;
	else
	{
		pT = new BThrNode;
		pT->data = c;		
		PreCreate(pT->pLchild);
		PreCreate(pT->pRchild);		
	}
}

pBThrNode pRe;//全局变量

void InThread(pBThrNode pCur)//中序递归线索化
{
	if (pCur)
	{
		InThread(pCur->pLchild);//左子树线索化
		if (!(pCur->pLchild))//前驱线索化
		
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值