线索二叉树的建立与遍历

烈酒焚心 提交于 2019-11-29 15:46:25

线索二叉树利用二叉树空余的指针域,来实现二叉树的链式化。然后,就可以通过前驱,后继像双向链表一样根据某种遍历次序对树的结点进行访问。

 


数据结构:

1 struct node{
2     int data;
3     struct node* left,*right;
4     int ltag,rtag;  //=0时,表明指向子结点;=1时,表示指向前驱/后继
5 }

 


 

建立线索二叉树:

  • 不同的遍历顺序,会得到不同的线索二叉树。
  • 一般使第线索链表的头和尾指向NULL(也可以加入一个头指针)

 

以中序遍历为例:

 1 // p:当前结点,pre:前驱结点   ;  对每一个点进行处理(NULL,ltag=0,ltag=1)
 2 void CreateNode(node &p,node& pre){
 3     if(p!=NULL){
 4         CreateNode(p->left,pre);    // pre进行递归改变!!!
 5         // 左子树为空
 6         if(p->left==NULL){
 7             p->left=pre;
 8             p->ltag=1;
 9         }    
10         // 建立前驱结点的后继线索
11         if(pre!=NULL && pre->right!=NULL){
12             pre->right=p;
13             pre->rtag=1;
14         }
15         pre=p;
16         CreateNode(p->right,pre);
17     }
18 }
19   // 建树
20 void CreateTree(node* root){
21     node* pre=NULL;
22     if(root!=NULL){
23         CreateNode(root,pre);
24         pre->right=NULL; // 遍历最后结点
25         pre->rtag=1;
26     }
27 }

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!