线索二叉树

来源:互联网 发布:淘宝号信誉查询网址 编辑:程序博客网 时间:2024/06/05 20:05

过完五一快拿不起书了~哎~一本数据结构拖了这么久尴尬

前面说到用游标类来实现分步遍历,那么线索二叉树就是另一种分步遍历方式。区别在于:二叉树游标类只能从前向后分步遍历二叉树,而线索二叉树既可以从前向后也可以从后向前分步遍历。

前面提到的所有遍历中,都没有把遍历时得到的结点的后继结点信息和前驱结点信息保存下来,因此,不能像操作双向链表那样操作二叉树。保存这些信息的常用方法就是建立线索二叉树。

注意:分析二叉树结构可知,在有n个结点(每个结点三个域)的二叉树中必定存在n+1个空链域。那么就利用这些空域来保存信息。

规定如下:(1)当某结点的左孩子结点域为空时,令该域表示按某种方法遍历二叉树时得到的该结点的前驱结点;(2)当某结点的右孩子结点域为空时,令该域表示按某种方法遍历二叉树时得到的该结点的后继结点;(3)为了区分指针指向的到底是孩子结点还是前驱(后继)结点,再给结点增加另个线索标志位来区分。

leftTread leftChilddatarightChildrightThread看线索标志位:

若leftTread(rightThread)等于0,表示leftChild(rightChild)指向结点的左孩子结点(右孩子结点);

若leftTread(rightThread)等于1,表示leftChild(rightChild)指向结点的前驱结点(后继结点);

这种对二叉树以某种方法遍历同时添加线索使其变为线索二叉树的过程称作按该方法对二叉树进行的线索化。一般在设计时会添加头结点,data域为空,leftChild指向二叉树的根结点,leftThread为0,rightChild指向按某种方式遍历时的最后一个结点,rightThread为1。可以画图表示更为直观,实现表示树中结点实际指向,虚线为线索指向遍历时的前驱后继结点。


代码以后实现,留个烂尾。

0 0