数据结构:树与二叉树(2)

1、线索二叉树

1.1线索二叉树的定义

(1)线索二叉树有啥用?

普通二叉树的节点包含左孩子和右孩子的信息,但并没有直接存储关于"直接前驱"和"直接后继"的信息,结点的前驱和后继只能在遍历过程中获得。

因此这里引入线索二叉树,线索二叉树会额外存储前驱和后继的信息,从而能够在常规操作之外快速找到节点的前驱或后继。

(2)定义

空指针域的利用

利用二叉链表中的空指针域保存信息

1)若结点有左子树,则lchild指向其左孩子;否则,lchild指向其直接前驱

2)若结点有右子树,则lchild指向其右孩子;否则,lchild指向其直接后继

标志位的引入

为了区分 lchildrchild 域中的指针究竟是指向孩子节点还是指向前驱/后继节点,在线索二叉树中为每个节点增加了两个标志位 LTagRTag。
LTag=0, lchild 域指向左孩子
LTag=1, lchild 域指向其前驱
RTag=0, rchild 域指向右孩子
RTag=1, rchild 域指向其后继

例如我们有这样一棵二叉树

那么它的先序遍历就是ABCDE
它的线索二叉树如下图:

它的中序遍历是:BCAED

线索二叉树如下图:

它的后续遍历是:CBEDA

线索二叉树如下图:

相关推荐
爱补鱼的猫猫35 分钟前
22、近端策略优化算法(PPO)论文笔记
论文阅读·算法
开心星人37 分钟前
【论文阅读】Reconstructive Neuron Pruning for Backdoor Defense
论文阅读·算法·剪枝
zhangpeng4555479401 小时前
数据结构-非线性结构-二叉树
数据结构
_Itachi__2 小时前
LeetCode 热题 100 543. 二叉树的直径
java·算法·leetcode
是代码侠呀2 小时前
飞蛾扑火算法matlab实现
开发语言·算法·matlab·github·github star·github 加星
C++ 老炮儿的技术栈3 小时前
C++中什么是函数指针?
c语言·c++·笔记·学习·算法
AllenO.o4 小时前
Redis五种数据结构详解
java·数据结构·数据库·redis·缓存
大耳猫4 小时前
卡尔曼滤波算法简介与 Kotlin 实现
算法·kotlin·卡尔曼滤波
重生之后端学习4 小时前
day23-集合(泛型&Set&数据结构)
java·开发语言·数据结构·算法
焜昱错眩..5 小时前
代码随想录训练营第二十一天 |589.N叉数的前序遍历 590.N叉树的后序遍历
数据结构·算法