线索二叉树的实现
2015-05-28 23:32
176 查看
#include <stdio.h> #include <stdlib.h> typedef char elemtype; //线索储存标志位 //link(0)表示指向左右孩子的指针 //link(1)表示指向前驱后继的线索 typedef enum {link,thread}pointertag; typedef struct bithrnode{ char data; struct bithrnode *lchild,*rchild; pointertag ltag; pointertag rtag; }Bithrnode,*Bithrtree; //全局变量,始终指向刚刚访问过的节点 Bithrtree pre; //创建一棵二叉树,约定用户遵照前序遍历的方式输入数据 void createbithrtree(Bithrtree *t){ char c; scanf("%c",&c); if(c==' '){ (*t)=NULL; } else { (*t)=(Bithrnode *)malloc(sizeof(Bithrnode)); (*t)->data=c; (*t)->ltag=link; (*t)->rtag=link; createbithrtree(&(*t)->lchild); createbithrtree(&(*t)->rchild); } } void inthreading(Bithrtree t){ if(t){ inthreading(t->lchild); //递归左孩子线索化 //节点处理 if(!t->lchild){//如果该节点没有左孩子,设置ltag为thread并把lchild指向刚刚访问过的节点 t->ltag=thread; t->lchild=pre; } if(!pre->rchild){ pre->rtag=thread; pre->rchild=t; } pre=t; inthreading(t->rchild); //递归右孩子线索化 } } void inorderthreading(Bithrtree *p,Bithrtree t){ *p=(Bithrnode *)malloc(sizeof(Bithrnode)); (*p)->ltag=link; (*p)->rtag=thread; (*p)->rchild=(*p); if(!t){ (*p)->lchild=*p; pre=*p; inthreading(t); pre->rchild=*p; pre->rtag=thread; (*p)->rchild=pre; } } int main() { Bithrtree p,t=NULL; createbithrtree(&t); inorderthreading(&p,t); return 0; }
相关文章推荐
- C++:STL标准入门汇总
- 补发《超级迷宫》站立会议三
- 《Spring2之站立会议2》
- PHP实现4种排序算法
- Mac 使用SSH远程登录
- DB天气app冲刺二阶段第一天
- 第一阶段站立会议10
- 自定义属性之图片切换实例——初始化——JS学习笔记2015-5-28(第41天)
- Android studio 环境搭建
- Microsoft发布全新的容器技术:Hyper-V容器和Nano Server
- java基础篇——包
- 第一阶段站立会议9
- vmware与linux时间的同步
- poj 3233(矩阵快速幂)
- 谁造就了运营商的悲剧?
- 如何解决ubuntu中使用SDL_OpenAudio失败返回错误信息no such audio device
- 安卓的生命周期
- 阅读计划---《大道至简》
- hdu1068 Girls and Boys
- Task 6.3 冲刺Two之站立会议1