【数据结构基础】线索二叉树(递归实现)
2017-05-26 16:45
393 查看
描述:将二叉树中结点的空左孩子指针域指向前驱结点,将空的右孩子指针域指向后继结点。
code:
跑时分别运行前序、中序、后序线索化。
code:
#pragma warning(disable:4996) #include<stdio.h> #include<stdlib.h> typedef struct TreeNode { char data; struct TreeNode *lchild, *rchild; int ltag, rtag; }Tree,*BTree; BTree Build_Tree(void) { BTree T; char ch; scanf("%c", &ch); if (ch == '#') { T = NULL; } else { T = (BTree)malloc(sizeof(Tree)); T->data = ch; T->ltag = 0; T->rtag = 0; T->lchild = Build_Tree(); T->rchild = Build_Tree(); } return T; } //先序线索化 void Pre_Thread(BTree cur, BTree *pre) { if (cur && cur->ltag==0) { printf("%c ", cur->data); if (cur->lchild == NULL) { cur->lchild = *pre; (*pre)->ltag = 1; cur->ltag = 1; } if (cur->rchild == NULL) { cur->rtag = 1; } if (*pre && (*pre)->rtag == 1) { (*pre)->rchild = cur; } *pre = cur; Pre_Thread(cur->lchild, pre); Pre_Thread(cur->rchild, pre); } } //中序线索化 void In_Thread(BTree cur, BTree *pre) { if (cur) { In_Thread(cur->lchild, pre); printf("%c ", cur->data); if (cur->lchild==NULL) { cur->lchild = *pre; cur->ltag = 1; } if (cur->rtag == NULL) { cur->rtag = 1; } if (*pre && (*pre)->rtag == 1) { (*pre)->rchild = cur; } *pre = cur; In_Thread(cur->rchild, pre); } } //后序线索化 void Post_Thread(BTree cur, BTree *pre) { if (cur) { Post_Thread(cur->lchild, pre); Post_Thread(cur->rchild, pre); printf("%c ", cur->data); if (cur->lchild == NULL) { cur->lchild = *pre; cur->ltag = 1; } if (cur->rchild == NULL) { cur->rtag = 1; } if (*pre && (*pre)->rtag == 1) { (*pre)->rchild = cur; } *pre = cur; } } int main(void) { BTree T,p=NULL; T = Build_Tree(); Pre_Thread(T, &p); //In_Thread(T, &p); //Post_Thread(T, &p); return 0; }
跑时分别运行前序、中序、后序线索化。
相关文章推荐
- 【数据结构基础】前序、中序、后序线索化二叉树(非递归实现)
- 数据结构基础5.1:树的遍历(递归与非递归实现)
- 数据结构基础(6)--递归和函数调用--汉诺塔问题C语言实现
- 数据结构基础 图的遍历(三) 之 BFS+DFS(非递归实现)
- 程序员面试宝典之数据结构基础---⑤单链表逆序的递归与非递归实现
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 数据结构基础(二)队列的实现
- 三、数据结构基础之顺序栈C语言实现
- 数据结构之二叉树的非递归实现及“狡猾”的指针
- 使用oracle 9i 里的层级查询(Hierarchical Queries)实现树状表结构的递归数据查询
- 一、数据结构基础之顺序表C语言实现
- 数据结构基础(三)哈希表的实现
- 【数据结构与算法】汉诺塔算法——C语言递归实现
- 数据结构之二叉树的非递归实现及“狡猾”的指针
- 数据结构(C#)--递归和动态规划法实现斐波那契数列的方法
- 【数据结构与算法】汉诺塔算法——C语言递归实现
- 算法:C语言实现 (第1-4部分)基础知识、数据结构……
- 四、数据结构基础之链栈C语言实现
- 一、数据结构基础之顺序表C语言实现
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现