四方显神

导航

数据结构016_树(下)线索化二叉树

本篇内容:线索化二叉树,(堆排序[专门提出来放在下一篇了])、赫夫曼树

一、线索化二叉树基本介绍

  1. n个结点的二叉链表中含有2n-(n-1)=(n+1)个空指针域。利用二叉链表中的空指针域,存放指向结点在某种遍历次序下的前驱和后继结点的指针(这种附加的指针称为线索)
  2. 这种加上了线索的二叉链表称为线索链表,相应的二叉树称为线索二叉树(Threaded BinaryTree)。根据线索性质的不同,线索二叉树可以分为前序线索二叉树、中序线索二叉树和后续线索二叉树
  3. 一个结点的前一个节点,称为前驱结点
  4. 一个结点的后一个节点,称为后继结点

这里对2n-(n-1)=(n+1)公式做一个说明,我一开始没懂:一个有n个结点的二叉树,每个节点有左右两个指针域,共有2n个指针域。除了根结点,每个结点有1个分支(这里可以理解成除了根结点每个结点有一个父结点伸出来的连接的线,就是父结点已经被用掉的指针域),也就是n-1个指针域被用掉了,那剩下的就是2n-(n-1)个,就是空指针域。

 二、中序线索二叉树代码实现

案例说明:将下面的二叉树,进行中序线索二叉树。并遍历中序线索二叉树

线索化二叉树说明:当线索化二叉树后,node节点的属性left和right,有如下情况:

1)left指向的是左子树,也可能是指向前驱结点。

2)right指向的是右字数,也可能是后继结点。

遍历说明:线索化后,各个结点指向有变化,因此原来的遍历方式不能使用,这时需要使用新的方式遍历线索化二叉树,各个结点可以通过线型方式遍历,因此无需使用递归,这样提高了遍历效率,遍历的次序和中序遍历保持一致。

 

 

代码实现:

 

posted on 2020-10-26 20:09  szdbjooo  阅读(198)  评论(0编辑  收藏  举报