二叉树线索化以及线索化前序、中序、后序遍历

本文介绍了二叉树的线索化概念,通过利用二叉树的空指针域存储节点的前驱和后继信息,形成线索二叉树。文章详细讲解了前序、中序和后序线索化二叉树的遍历过程,帮助理解线索二叉树的构造和遍历方法。
摘要由CSDN通过智能技术生成

二叉树线索化以及线索化前序、中序、后序遍历

前面已经对二叉树的创建与建立有了一定了解,那二叉树的线索化又是什么呢?

二叉树虽然是非线性结构,但二叉树的遍历却为二叉树的节点导出了一个线性序列。

用二叉树作为存储结构时,取到一个节点,只能获取节点的左孩子和右孩子,不能直接得到节点的任一遍历序列的前驱或者后继。
为了保存这种在遍历中需要的信息,我们利用二叉树中指向左右子树的空指针来存放节点的前驱和后继信息

利用二叉树中的空指针域来存放在某种遍历次序下的前驱和后继,这种指针叫“线索”。这种加上了线索的二叉树称为线索二叉树。

根据线索的性质的不同,线索二叉树分为:前序线索二叉树 , 中序线索二叉树 , 后序线索二叉树

节点结构如下:

enum PointerTag{ LINK, THREAD };

template<class T>
struct BinTreeNodeTread
{
	BinTreeNodeTread(const T& data)
	: _pLeft(NULL)
	, _pRight(NULL)
	, _leftThread(LINK)
	, _rightThread(LINK)
	, _data(data)
	{}

	BinTreeNodeTread* _pLeft;
	BinTreeNodeTread* _pRight;
	PointerTag _leftThread; // 左线索 
	PointerTag _rightThread; // 右线索 
	T _data;
};

_leftThread标记是否有左子树,值为LINK表示有左孩子,值为THREAD表示没有左孩子࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值