第六十九课 二叉树的线索化实现

Posted wanmeishenghuo

tags:

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

技术分享图片

 

 

在工程中,很多时候二叉树一旦建立就不会轻易改动,这样的二叉树就用于遍历,我们讲了先序遍历、中序遍历、后续遍历三种方式,都是递归完成的,在工程中,如果对一棵二叉树反复的执行遍历,效率很低,递归的效率是比较低的。

改进的做法就是将遍历的结果保存下来,下一次遍历时直接用这个结果。

在工程中另一种需求就是,在中序遍历下,需要知道某一个节点的前驱是谁,后继是谁,需要这三个节点来判断是否执行后续的操作。这个时候又需要遍历了。每次都递归的进行遍历,效率太低了。

为了效率,我们使用线索化二叉树的方法,将二叉树转换为一个线性结构,这样效率就高了。

技术分享图片

 

 技术分享图片

 

技术分享图片

 

技术分享图片

 

 技术分享图片

 

初始准备两个队列,tmp队列用于层次遍历,出队的时候将元素放到queue中,queue队列负责线索化。

新添加层次遍历函数的流程如下:

技术分享图片

 

 添加层次遍历函数:

 1 void levelOrderTraversal(BTreeNode<T>* node, LinkQueue<BTreeNode<T>*>& queue)
 2     {
 3         if( node != NULL )
 4         {
 5             LinkQueue<BTreeNode<T>*> tmp;
 6 
 7             tmp.add(node);
 8 
 9             while( tmp.length() > 0 )
10             {
11                 BTreeNode<T>* n = tmp.front();
12 
13                 if( n->left != NULL )
14                 {
15                     tmp.add(n->left);
16                 }
17 
18                 if( n->right != NULL )
19                 {
20                     tmp.add(n->right);
21                 }
22 
23                 tmp.remove();
24                 queue.add(n);
25             }
26         }
27     }

 

以上是关于第六十九课 二叉树的线索化实现的主要内容,如果未能解决你的问题,请参考以下文章

java实现线索化二叉树的前序中序后续的遍历(完整代码)

第六十课 二叉树的深层特性

二叉树的线索化

算法系列之线索化二叉树,前序线索化中序线索化后序线索化以及遍历~

二叉树的线索化

二叉树的线索化