二叉树的构建,线索化,以及线索二叉树的遍历c++语言表示(《数据结构》算法6.5,6.6,6.7)
来源:互联网 发布:河北网络干部学院辅助 编辑:程序博客网 时间:2024/05/17 03:06
下面是用c++代码实现的课本算法。有详细注释。
#include<cstdio> #include<cstdlib> #include<iostream> using namespace std; typedef enum PointerTag{Link,Thread};//枚举指针和线索 typedef struct BiThrNode{ int data; struct BiThrNode *lchild,*rchild; PointerTag LTag,RTag; }*BiThrTree,BiThrNode; BiThrTree pre; //指向按照某种顺序遍历过程中当前结点的前一个结点 void CreateBiThrTree(BiThrTree &T){//递归方式先序建立二叉树 int data2; cin>>data2; if(data2==0){//到叶子结点时,输入两个0,代表叶子下面无左孩子,无右孩子 T=NULL; return ; } else{ T=(BiThrTree)malloc(sizeof(BiThrNode)); T->data=data2; CreateBiThrTree(T->lchild);if(T->lchild)T->LTag=Link; //不管左孩子是否存在,先初始化为指针,线索化的时候再改 CreateBiThrTree(T->rchild); if(T->rchild)T->RTag=Link; //不管右孩子是否存在,先初始化为指针,线索化的时候再改 } } void InThreading(BiThrTree &p){if(p){InThreading(p->lchild);//先线索化左子树 if(!p->lchild){p->LTag=Thread;p->lchild=pre;}if(!pre->rchild){pre->RTag=Thread;pre->rchild=p;}pre=p;//把当前结点赋给前驱 InThreading(p->rchild);//最后线索化右子树 }}void InOrderThreading(BiThrTree &Thrt,BiThrTree &T){//中序遍历的顺序线索化 Thrt = (BiThrTree)malloc(sizeof(BiThrNode));//先申请一个头结点 Thrt->LTag=Link;Thrt->RTag=Thread;//头结点左边为指针,右边为线索 Thrt->rchild=Thrt;//右边线索先回指 头结点 if(!T)Thrt->lchild=Thrt;//如果为空树,左边也回指头结点 else{Thrt->lchild=T;//头结点指向树根 pre=Thrt;//先前结点先设为头结点 InThreading(T);//中序遍历线索化 pre->rchild=Thrt;//pre为树的最后一个结点,后继指向头结点 pre->RTag=Thread;//右边为线索 Thrt->rchild=pre;//头结点前驱指向最后一个结点 }}void InOrderTraverse_Thr(BiThrTree &T){//遍历线索二叉树 BiThrTree p=T->lchild;while(p!=T){while(p->LTag==Link){p=p->lchild;}//一直沿左走 cout<<p->data;//输出当前结点 while(p->RTag==Thread&&p->rchild!=T){ p=p->rchild;cout<<p->data;}p=p->rchild;//当遇到没有线索的结点时,下一个应该访问的结点是当前结点的右子树一直往左走找到左标志为1的结点 }}int main(){ BiThrTree T;//指向根结点的指针BiThrTree Thrt;//头结点 CreateBiThrTree(T); InOrderThreading(Thrt,T); InOrderTraverse_Thr(Thrt); return 0; }
0 0
- 二叉树的构建,线索化,以及线索二叉树的遍历c++语言表示(《数据结构》算法6.5,6.6,6.7)
- c语言实现线索二叉树的建立,线索化以及遍历
- 线索二叉树的线索化算法
- (C++)二叉树的线索化 / 线索二叉树
- 线索化二叉树、线索二叉树的遍历
- 线索二叉树的遍历(数据结构)
- C语言:线索二叉树的线索化及其遍历实现
- 数据结构实验 建树+线索化二叉树+线索二叉树的遍历
- 线索二叉树的遍历
- 二叉树的二叉线索存储表示
- 【数据结构】算法6.5-6.7 线索二叉树
- C语言-数据结构-线索二叉树-生成、遍历源代码
- C语言线索二叉树的实现
- 线索二叉树的c语言实现
- 6.3线索二叉树(二叉树的线索化)
- 线索化二叉树(二叉树的简单遍历)
- 二叉树的遍历和线索线索二叉树
- 二叉树的建立,遍历,线索化
- POJ 2482 Stars in Your Window
- Error configuring application listener of class org.springframework.web.context.ContextLoaderListene
- iOS 7 的多任务
- hdu1003 Max Sum(DP之最大子序列和)
- python编程常用模板总结
- 二叉树的构建,线索化,以及线索二叉树的遍历c++语言表示(《数据结构》算法6.5,6.6,6.7)
- oracle的序列使用注意
- java web会话跟踪技术(深入理解HTTP Session与Cookie)
- 数据结构之动态数组实现
- 计算 signed short 的取值范围
- java网络请求GET和POST方式
- python笔记之字典的创建
- Eclipse中新建包却显式成文件夹的解决办法
- android技术博客