线索树(上)

线索树是一种利用二叉树中NULL链域的变形,旨在提高特定操作的效率。通过在度为0或1的节点链域中存储中序遍历的前后驱节点信息,实现非递归的中序遍历。本文介绍了线索树节点结构及中序遍历中寻找后续节点和前驱节点的操作方法,以及左插入的步骤。
摘要由CSDN通过智能技术生成

补上很久前在线写后浏览器崩溃一篇文章,重写了一次大哭

线索树: 二叉树中利用NULL链域的一种变形二叉树中度数为0或1的节点有2个或1个的链域,其值为NULL,这些链域都浪费了,所以对这些链域加以利用,使得二叉树的某些操作效率更佳.

ps: 如果以计算一棵二叉树的所有链域 (n0 n1 n2 三种节点,度数分别为0,1,2) 度数: 子节点的个数, 则树的总链域数 为 2*(n2+n1+n0),而值为NULL的链域数为n1+2*n0;(n0=n2+1) ,所以如果有2n 个链域,就有 n+1 个链域是无用的,这是一种浪费

线索的含义:

1)如果节点有左子树,左链域就指向左子树,否则,就指向其在树 中序遍历中 的前驱节点

2)如果节点有右子树,右链域就指向右子树,否则,就指向其在树 中序遍历中 的后驱节点

ps:由于链域有两种用途,所以要另外设置两个标志域,指明链域的用途

下面是节点的结构:

template<class T>
class tnode
{
    public:
	tnode(T data=T(), 
		bool ltd=false, tnode* lcd=NULL,
		bool rtd=false, tnode* rcd=NULL)
		:data(data),ltd(ltd),lcd(lcd),rtd(rtd),rcd(r
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值