二叉树的线索化以及 线索化的先序,中序,后序遍历

本文介绍了二叉树的线索化概念,旨在利用空指针域存储节点的前驱和后继信息。主要内容包括二叉树的前序和中序线索化及其遍历过程,通过递归算法在遍历过程中修改空指针,实现线索化。文中提供了详细的线索化和遍历的思路及代码实现。
摘要由CSDN通过智能技术生成

先简要说下什么线索化

二叉树是一种非线性结构,遍历二叉树几乎都是通过递归或者用栈辅助实现非递归的遍历。用二叉树作为存储结构时,取到一个节点,只能获取节点的左孩子和右孩子,不能直接得到节点的任一遍历序列的前驱或者后继。由于有n个结点的二叉链表中必定存在n+1个空指针域,因此充分利用这些空指针域来存放结点的前驱和后继信息。

本篇主要介绍二叉树的前序和中序线索化以及遍历,下篇介绍后序线索化以及遍历

 

线索化二叉树结点:

 

enum Info //存放标志
{
	LINK,
	THREAD
};
template<class T>
struct BinaryTreeNodeThd
{
	BinaryTreeNodeThd(const T& data)
	: _data(data)
	, _pLeft(NULL)
	, _pRight(NULL)
	, _pParent(NULL)
	, _LeftThread(LINK)
	, _RightThread(LINK)
	{}
	T _data;
	BinaryTreeNodeThd<T>* _pLeft;
	BinaryTreeNodeThd<T>* _pRight;
	BinaryTreeNodeThd<T>* _pParent;
	Info _LeftThread;
	Info _RightThread;
};

  结点默认的左右线索标志符为LINK, 当需要线索化时改为THREAD,


首先创建二叉树:采用前序的方式创建

 

	BinaryTreeThd()
		:_pRoot(NULL)
	{
	}
	BinaryTreeThd(T 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值