数据结构实验之二叉树的建立与遍历
2015-08-14 15:48
429 查看
题目描述
已知一个按先序序列输入的字符序列,如abc,,de,g,,f,,,(其中逗号表示空节点)。请建立二叉树并按中序和后序方式遍历二叉树,最后求出叶子节点个数和二叉树深度。输入
输入一个长度小于50个字符的字符串。输出
输出共有4行:第1行输出中序遍历序列;
第2行输出后序遍历序列;
第3行输出叶子节点个数;
第4行输出二叉树深度。
示例输入
abc,,de,g,,f,,,
示例输出
cbegdfacgefdba35
提示
#include<stdio.h> #include<stdlib.h> typedef struct node { char data; struct node *l; struct node *r; }Tree; int count=0; Tree *creat(Tree *p) { char c; if((c=getchar())==',') p=NULL; else { p=(Tree*)malloc(sizeof(Tree)); p->data=c; p->l=creat(p->l); p->r=creat(p->r); } return p; } void printmid(Tree *p) { if(p!=NULL) { printmid(p->l); printf("%c",p->data); printmid(p->r); } } void printhigh(Tree *p) { if(p!=NULL) { printhigh(p->l); printhigh(p->r); printf("%c",p->data); } } void leave(Tree *p) { if(p!=NULL) { if(p->l==NULL&&p->r==NULL) count++; leave(p->l); leave(p->r); } } int deep(Tree *p) { int ld,rd; if(!p) return 0; else { ld=deep(p->l); rd=deep(p->r); return ld>rd?ld+1:rd+1; } } int main() { Tree *p; p=creat(p); printmid(p); printf("\n"); printhigh(p); printf("\n"); leave(p); printf("%d\n",count); printf("%d\n",deep(p)); return 0; }
相关文章推荐
- 数据结构实验之求二叉树后序遍历和层次遍历
- 数据结构实验之求二叉树后序遍历和层次遍历
- 数据结构---并查集
- 数据结构之---C语言实现最小生成树之kruskal(克鲁斯卡尔)算法
- Nginx基本数据结构之ngx_chain_t
- 数据结构实验之二叉树的建立与遍历
- 数据结构与算法 代码整理:外排序法
- SBT
- 哈希表
- 伸展树
- 树堆
- AVL树
- 红黑树并没有我们想象的那么难
- JAVA基础——常见数据结构简要
- 可修改主席树
- Nginx基本数据结构之ngx_array_t
- Nginx基本数据结构之ngx_str_t
- 《数据结构与算法分析——c语言描述》读后笔记
- 数据结构(Java语言)——Queue简单实现
- python数据结构用法