线索二叉树的基本概念

Posted 薛定谔的猫ovo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线索二叉树的基本概念相关的知识,希望对你有一定的参考价值。


线索二叉树的基本概念

在二叉树的学习中,我们知道,在有 n n n个结点的二叉树中,有 n − 1 n-1 n1个空指针。这是因为每个叶结点有2个空指针,而每个度为1的结点有1个空指针,总的空指针数为 2 n 0 + n 1 2n_0+n_1 2n0+n1,又 n 0 = n 2 + 1 n_0=n_2+1 n0=n2+1,所以总的空指针数为 n 0 + n 1 + n 2 + 1 = n + 1 n_0+n_1+n_2+1=n+1 n0+n1+n2+1=n+1

为此,可以改造二叉树的结点,在结点的空指针域中存放该结点在某种遍历次序下的前驱结点或后继结点的指针,并称之为线索。对一棵二叉树中的所有结点的空指针域按照某种遍历次序加线索的过程叫做线索化,被线索化了的二叉树称作线索二叉树

引入线索二叉树是为了加快查找结点前驱和结点后继的速度

在空的左指针域中存放的指向其前驱结点的指针叫做前驱线索,在空的右指针域中存放的指向其后继结点的指针叫做后继线索


线索二叉树的构造

在二叉树线索化时,通常规定:若无左子树,令 l c h l i d lchlid lchlid指向其前驱结点;若无右子树,令 r c h i l d rchild rchild指向其后继结点。
为此,还需要增加两个标志域表明当前指针域所指的对象是指向左(右)子结点还是指向其直接前驱(后继)。

其中,标志域的含义如下:
l t a g 0 , l c h i l d 域 指 示 结 点 的 左 孩 子 1 , l c h i l d 域 指 示 结 点 的 直 接 前 驱 r t a g 0 , r c h i l d 域 指 示 结 点 的 右 孩 子 1 , r c h i l d 域 指 示 结 点 的 直 接 后 继 ltag\\begincases 0,\\quad lchild域指示结点的左孩子\\\\ 1,\\quad lchild域指示结点的直接前驱\\\\ \\endcases \\quad\\quad rtag\\begincases 0,\\quad rchild域指示结点的右孩子\\\\ 1,\\quad rchild域指示结点的直接后继\\\\ \\endcases ltag0lchild1lchildrtag0rchild1rchild

用不同的顺序遍历二叉树,在遍历过程中将线索加入到空的指针域,可得到相应的线索二叉树。

中序线索二叉树的建立为例:

以上是关于线索二叉树的基本概念的主要内容,如果未能解决你的问题,请参考以下文章

PHP数据结构-完全二叉树线索二叉树及树的顺序存储结构

二叉树1. 二叉树的基本概念

Python数据结构系列☀️《树与二叉树-基础知识》——知识点讲解+代码实现☀️

PHP数据结构-完全二叉树线索二叉树及树的顺序存储结构

二叉树的线索化

C语言数据结构与算法----树和二叉树全面总结(中)