数据结构之线索二叉树
2019-02-22 19:41
85 查看
/* 线索二叉树 */ #include<stdio.h> #include<stdlib.h> //线索存储标志位 //Link(0):表示指向左右孩子的指针 //Thread(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 *); //中序遍历线索化 void InThreading(BiThrTree); void InorderThreading(BiThrTree *,BiThrTree); void main() { BiThrTree P,T=NULL; createBiThrTree(&T); InorderThreading(&P,T); } 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)//前驱线索 { T->ltag=Thread; T->lchild=pre; } if(!pre->rchild) { pre->rtag=Thread; pre->rtag=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; }else{ (*p)->lchild=T; pre=*p; InThreading(T); pre->rchild=*p; pre->rtag=Thread; (*p)->rchild=pre; } }
相关文章推荐
- 数据结构与算法笔记 lesson 21 线索二叉树
- (原)数据结构——线索二叉树
- 数据结构——线索二叉树
- 数据结构之---C语言实现线索二叉树
- 数据结构之线索二叉树
- 数据结构那点事--线索二叉树
- 数据结构:中序线索二叉树
- C语言-数据结构-线索二叉树-生成、遍历源代码
- 数据结构——线索二叉树
- 数据结构(十六)线索二叉树
- 数据结构之线索二叉树
- 数据结构之线索二叉树
- 数据结构之C++实现线索二叉树(无主函数)
- 在以(后继)线索二叉树为储存结构的二叉排序树中删除关键字为x的数据元素
- 数据结构(十六) 线索二叉树讲解(带头节点后序加线索) 以及实现的完整代码
- 数据结构知识整理 - 线索二叉树
- 数据结构——前序线索二叉树及其前序遍历
- 数据结构7—线索二叉树 (java)
- 二叉树的链式存储与线索二叉树-数据结构(14)
- 数据结构上机——哈夫曼树 线索二叉树