线索化二叉树(中序)
2017-11-01 20:07
267 查看
#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; }
相关文章推荐
- C语言实现中序线索化二叉树并遍历
- 第十周 项目4 - 线索化二叉树(中序)
- 【数据结构】中序线索化二叉树后实现一个迭代器来遍历二叉树
- 中序线索化二叉树
- 第十一周项目1(3)-中序线索化二叉树的算法验证
- 第十一周 项目1:二叉树算法验证(3) 中序线索化二叉树的算法验证
- 第11周项目1-验证算法(3)中序线索化二叉树的算法验证
- [Java算法分析与设计]中序线索化二叉树
- 第十一周项目1-二叉树算法验证(中序线索化二叉树的算法验证 )
- 第十周项目1(3)---中序线索化二叉树的算法验证
- 第十周【项目1-中序线索化二叉树的算法验证】(3)
- 中序线索化二叉树
- 第10周项目1(3)中序线索化二叉树的算法验证
- 第十一周项目1——二叉树算法验证(3) 中序线索化二叉树的算法验证
- 【第十一周 项目1-验证算法(3)中序线索化二叉树的算法验证 】
- 第十一周项目1——二叉树算法验证(3) 中序线索化二叉树的算法验证
- 第11周项目1-验证算法(3)中序线索化二叉树的算法验证
- 第十一周项目1-验证算法(3)中序线索化二叉树的算法验证
- 第十一周项目1 - 二叉树算法验证(3)中序线索化二叉树的算法验证
- 中序线索化二叉树