线索化二叉树(中序)
来源:互联网 发布:神州律师网网络培训 编辑:程序博客网 时间:2024/05/17 05:12
#include <cstdio>#include <cstdlib>typedef char ElemType;typedef enum {Link, Thread} PointerTag; //Link = 0, Thread = 1; typedef struct BiThrNode{char data;struct BiThrNode *lchild, *rchild;PointerTag ltag;PointerTag rtag;} BiThrNode,*BiThrTree;BiThrTree pre; // 全局变量,始终指向刚刚访问过的结点(若指针p指向当前正在访问的节点,则pre为其前驱节点(即p刚访问完的节点) ) BiThrTree CreateBiThrTree(BiThrTree T){char c;scanf("%c", &c);if('#' == c ){ return NULL;}else{ T = (BiThrNode *)malloc(sizeof(BiThrNode));T->data = c;T->ltag = Link; T->rtag = Thread;T->lchild = T->rchild = NULL;printf("%c'lchild is:\n",T->data);getchar();T->lchild = CreateBiThrTree(T->lchild);printf("%c'rchild is:\n",T->data) ;getchar();T->rchild = CreateBiThrTree(T->rchild);}return T;}// 中序遍历_线索化二叉树 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 = (BiThrTree)malloc(sizeof(BiThrNode));/*头节点初始化*/ p->ltag = Link; p->rtag = Thread;p->rchild = p; //右指针回旋 if(!T){p->lchild = p; //左指针回旋 }else{p->lchild = T;pre = p;InThreading(T); //中序化 /* 处理最后一个节点*/pre->rchild = p;pre->rtag = Thread; p->rchild = pre;}}void visit(char c){printf("%c ", c);}// 中序遍历二叉树void InOrderTraverse(BiThrTree T ){BiThrTree p;p = T->lchild; //访问根节点 while(p!= T){while(p->ltag == Link ){p = p->lchild;} visit(p->data);while(p->rtag == Thread && p->rchild != T ){p = p->rchild;visit(p->data);}p = p->rchild;}}int main(){BiThrTree P, T;printf("Root’s is:\n");T = CreateBiThrTree(T);InOrderThreading(P,T);printf("Inorder is-----\n");InOrderTraverse(P);printf("\n");return 0;}
阅读全文
0 0
- 线索化二叉树(中序)
- (原创)中序线索化二叉树
- 中序线索化二叉树
- 中序线索化 二叉树
- 中序线索化二叉树
- 实现中序线索化二叉树
- 中序线索化二叉树
- 中序线索化二叉树
- 中序线索化二叉树
- 中序线索化二叉树
- 中序线索化二叉树
- 中序线索化二叉树
- 中序线索化二叉树
- 二叉树的中序线索化
- 中序线索化二叉树
- 中序线索化二叉树
- 线索二叉树(中序索引)
- 中序线索二叉树(Java)
- 四边形不等式
- 剑指offer之最小的K个数(Python)
- Windows上pyltp的安装及使用
- 创建登录界面
- 第7章任务1:从键盘输入3个整型数据
- 线索化二叉树(中序)
- 【信息学奥赛】【C++】(一)赋值语句
- 十八、java中的类和对象
- hadoop2.8.2分布式集群实战
- web测试方法总结
- 创建抽象类Transport
- andorid Telephony 整体介绍
- 51Nod 1284容斥定理
- var、let、const