数据结构之 二叉树的储存和遍历总结
2017-02-09 08:35
357 查看
知道前序(包括空结点 下面代码用’,’代替)建立一个二叉树,前序 中序 后序 层序输出 如何求叶子结点数, 如何求二叉树深度。
知道前序和中序建立二叉树过程
知道中序和后序建二叉树过程
#include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct node { char data; struct node *lt, *rt; }ST; char str[52]; int flag, num; ST *creat() { ST *root; if(str[++flag] == ',') { root = NULL; } else { root = (ST *)malloc(sizeof(ST)); root->data = str[flag]; root->lt = creat(); root->rt = creat(); } return root; } void midsort(ST *root) { if(root) { midsort(root->lt); printf("%c", root->data); midsort(root->rt); } } void lastsort(ST *root) { if(root) { lastsort(root->lt); lastsort(root->rt); printf("%c", root->data); } } void headsort(ST *root) { if(root) { printf("%c", root->data); headsort(root->lt); headsort(root->rt); } } void input(ST *root) { ST *team[100]; int head, last; head = 0; last = 0; team[last++] = root; while(head < last) { if(team[head]){ printf("%c", team[head]->data); team[last++] = team[head]->lt; team[last++] = team[head]->rt; } head++; } } void leaf(ST *root) { if(root) { if(!root->lt && !root->rt) num++; leaf(root->lt); leaf(root->rt); } } int deep(ST *root) { int max, l, r; if(root) { l = deep(root->lt); r = deep(root->rt); if(l > r) max = l; else max = r; return max + 1; } else return 0; } int main() { ST *root; while(~scanf("%s", str)) { num = 0; flag = -1; root = creat(); headsort(root);/*前序输出*/ printf("\n"); midsort(root);/*中序输出*/ printf("\n"); lastsort(root);/*后序输出*/ printf("\n"); input(root);/*层序输出*/ printf("\n"); leaf(root); printf("%d\n", num);/*输出叶子结点数*/ printf("%d\n", deep(root));/*二叉树深度的求法*/ } return 0; }
知道前序和中序建立二叉树过程
#include<stdio.h> #include<string.h> #include<stdlib.h> typedef struct node { char data; struct node *lt, *rt; }ST; ST *creat(int n, char a[], char b[]) { ST *root; int i; if(n == 0) return NULL; root = (ST *)malloc(sizeof(ST)); root->data = a[0]; for(i = 0; b[i]; i++) if(b[i] == a[0]) break; root->lt = creat(i, a + 1, b); root->rt = creat(n - i - 1, a + i + 1, b + i + 1); return root; } void lastsort(ST *root) { if(root) { lastsort(root->lt); lastsort(root->rt); printf("%c", root->data); } } int main() { ST *root; int len; char a[100], b[100]; while(~scanf("%s %s", a, b)) { len = strlen(a); root = creat(len, a, b); lastsort(root); printf("\n"); } return 0; }
知道中序和后序建二叉树过程
#include<stdio.h> #include<string.h> #include<stdlib.h> typedef struct node { char data; struct node *lt, *rt; }ST; ST *creat(int n, char a[], char b[])//后序,中序 { ST *root; int i; if(n == 0) return NULL; root = (ST *)malloc(sizeof(ST)); root->data = a[n-1]; for(i = 0; a[i]; i++) if(b[i] == a[n-1]) break; root->lt = creat(i, a, b); root->rt = creat(n - i - 1, a + i, b + i + 1); return root; } void headsort(ST *root) { if(root){ printf("%c", root->data); headsort(root->lt); headsort(root->rt); } } int main() { ST *root; int t, len, i, j; char a[55], b[55], t1; while(~scanf("%d", &t)) { while(t--) { memset(a, 0, sizeof(a)); memset(b, 0, sizeof(b)); scanf("%s %s", b, a); len = strlen(b); root = creat(len, a, b); headsort(root); printf("\n"); } } return 0; }
相关文章推荐
- AVL树-自平衡二叉查找树(Java实现)
- 文件遍历排序函数
- C#数据结构之顺序表(SeqList)实例详解
- Lua 学习笔记之C API 遍历 Table实现代码
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#遍历文件夹后上传文件夹中所有文件错误案例分析
- C#数据结构之队列(Quene)实例详解
- C#数据结构揭秘一
- C#中遍历Hashtable的4种方法
- C#数据结构之单链表(LinkList)实例详解
- Erlang中遍历取出某个位置的最大值代码
- 数据结构之Treap详解
- C++实现图的邻接矩阵存储和广度、深度优先遍历实例分析
- 详解shell 遍历文件夹内所有文件并打印绝对路径
- C++实现图的邻接表存储和广度优先遍历实例分析
- C语言二叉树的非递归遍历实例分析
- C++ 遍历目录下文件简单实现实例
- C 语言二叉树几种遍历方法详解及实例
- 使用C语言构建基本的二叉树数据结构