二叉线索树

本文介绍了二叉线索树的概念,探讨了如何通过线索化在二叉树中方便地找到结点的前驱和后继。在中序线索二叉树中,可以非递归地进行先根、中根、后根次序遍历,并详细说明了如何寻找这些遍历顺序下的后继和前驱结点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

二叉树的定义:         

         由于在二叉树的链式存储结构中,每个结点存储了指向其左右孩子结点的链,而没有存储指向某种线索性次序下的前驱或者后继结点的链。当需要获得结点在一种遍历序列中的前驱或者后继结点时。有俩中解决方案:

 (1)再进行一次遍历,寻找前驱或后继结点。这需要花费较多的时间,效率较低。

 (2)采用多重链表结构,每个结点增加俩条链,分别指向前驱和后继结点。需要花费较多的存储空间。因此,引入线索二叉树。

         在二叉树的二叉链表表示中,若结点的子树为空,则指向孩子的链为空值。具有N个结点的二树,共2N条链,其中N-1条链表示各结点之间的关系,n+1条链为空。                  线索二叉树利用这些空链存储结点在某种遍历次序子下的前驱和后继关系,即原有非空的链保持不变,仍然指向该结点的左右孩子结点;空left域指向前驱结点,空right域指向后继结点。指向前驱和后继结点的链统称为线索。        为了区分每条链到底指向孩子结点还是线索,每个结点需要增加俩个链标记itaghe rtagitag = 0 left 指向左孩子itag = 1 left  为线索指向前驱结点rtag = 0 right 指向右孩子rtag = 1 right  为线索指向后继结点总之就是有孩子的是0,没孩子是1指向前驱结点或后继结点。

#include<iostream>
using namespace std;

template <class T>
class ThreadBinaryNode   //线索二叉树的二叉链表结点类,T指定结点的元素类型
{
public:
	T data;
	ThreadBinaryNode<T> *left,*right;  //指针域指向左右孩子结点
	int ltag, rtag;  //左右线索标志
	ThreadBinaryNode<T> (T data,ThreadBinaryNode<T> *left = NULL, ThreadBinaryNode<T> *right = NULL)
	{
	  this ->data =data;
	  this ->left = left;
	  this ->right = right;
	  this ->ltag = this -> rtag = 0;
	}
};

中序线索二叉树

二叉树中的中序线索化:     对一棵二叉树进行中序线索化,就是在遍历二叉树时为每个结点添加线索和链标记。
(1)已知一棵二叉树采用具有线索二叉树结点的二叉链表存储,root指向根结点,每个结的left、、right域指向左右孩子结点,线索标记为0。
 (2)设p指向

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值