线索二叉树

1、线索二叉树的概念


         线索二叉树_第1张图片

  如果我们需要得到上面二叉树的排序结果时,能够直接得到,而不是每次都去重新排序二叉树的话,效率就会大大得到提高了。线索二叉树就是基于这个理念,将本二叉树的排序事先存储起来,当需要时直接获取结果即可。


2、线索二叉树的实现方法


  (1)新开辟空间来存储二叉树序列;

  (2)利用二叉树中未被利用的空间资源;


  第二种方式较为复杂,这里讲解第二种方式。首先来看一下普通二叉树的节点存储结构:


         线索二叉树_第2张图片

 

  二叉树中每个节点形式如上图,左右两个指针用于存储左子节点和右子节点的地址,但是我们发现叶子节点的左右指针都是为空的,这就造成了空间浪费,我们就用这些空指针来存储节点的前后关系。

  线索二叉树中叶子节点的左指针用于存储前驱结点,右指针用于存储后继节点;这样的左右指针叫做线索。但是这样就造成了普通指针和线索指针不好区分,就又引入了两个指针Lbit和Rbit用于标志是否为线索,它们只占一个字节,所以不会造成过多开销。


         


  这些标志代表的含义分别为:


               线索二叉树_第3张图片


3、构造线索二叉树


  怎样将普通二叉树转换为线索二叉树呢?

  首先按照题目要求,写出此二叉树的前序,中序,或者后序遍历。根据此遍历,将节点的左右空指针分别指向相应的前驱结点和后继节点即可。例如:


        线索二叉树_第4张图片


  同理可得出其中序线索二叉树和后序线索二叉树为:


         线索二叉树_第5张图片 


  将每个节点的左线索指向前驱结点,右线索指向后继节点。



线索二叉树_第6张图片

你可能感兴趣的:(二叉树,数据结构与算法,线索二叉树,后继节点,前驱结点)