数据结构实验之二叉树的建立与遍历
2018-01-24 11:05
225 查看
数据结构实验之二叉树的建立与遍历
Time Limit: 1000MS Memory Limit: 65536KBProblem Description
已知一个按先序序列输入的字符序列,如abc,,de,g,,f,,,(其中逗号表示空节点)。请建立二叉树并按中序和后序方式遍历二叉树,最后求出叶子节点个数和二叉树深度。Input
输入一个长度小于50个字符的字符串。Output
输出共有4行:第1行输出中序遍历序列;
第2行输出后序遍历序列;
第3行输出叶子节点个数;
第4行输出二叉树深度。
Example Input
abc,,de,g,,f,,,
Example Output
cbegdfacgefdba35 #include<stdio.h> #include<stdlib.h> char s[60]; int k; struct node { char date; struct node *lchild, *rchild; }; struct node *creat(struct node *T, char *s) { char ch; ch = s[k++]; if(ch == ',') { T = NULL; } else { T = (struct node *)malloc(sizeof(struct node)); if(!T)exit(-1); T -> date = ch; T -> lchild = creat(T, s); T -> rchild = creat(T, s); } return T; } void zhong(struct node *T) { if(T) { zhong(T -> lchild); printf("%c", T -> date); zhong(T -> rchild); } } int yenum(struct node *T) { if(T ==NULL)return 0; else if(!T -> lchild && !T -> rchild)return 1; else return yenum(T -> lchild) + yenum(T -> rchild); } int deep(struct node *T) { if(!T)return 0; else return deep(T -> lchild) > deep(T -> rchild) ? deep(T -> lchild) + 1 : deep(T -> rchild) + 1; } void houxu(struct node *T) { if(T) { houxu(T -> lchild); houxu(T -> rchild); printf("%c", T -> date); } } int main() { k = 0; scanf("%s", s); struct node *T; T = NULL; T = creat(T, s); zhong(T); printf("\n"); houxu(T); printf("\n"); printf("%d\n%d\n", yenum(T), deep(T)); return 0; }
相关文章推荐
- 数据结构实验之二叉树的建立于遍历
- 数据结构实验之二叉树的建立与遍历
- 数据结构实验之二叉树的建立与遍历
- 数据结构实验之二叉树的建立与遍历
- 数据结构实验之二叉树的建立与遍历
- 数据结构实验之二叉树的建立与遍历
- 数据结构实验之二叉树的建立与遍历
- 数据结构实验之二叉树的建立与遍历
- 数据结构实验之二叉树的建立与遍历
- 数据结构实验之二叉树的建立与遍历
- 数据结构实验之二叉树的建立与遍历 分类: 树 2015-06-21 11:02 8人阅读 评论(0) 收藏
- 数据结构实验之二叉树的建立与遍历
- 数据结构实验之二叉树的建立与遍历
- 数据结构实验之二叉树的建立与遍历
- 数据结构实验之二叉树的建立与遍历
- 数据结构实验之二叉树的建立与遍历
- 数据结构实验之二叉树的建立与遍历
- 数据结构实验之二叉树的建立与遍历
- 数据结构实验之二叉树的建立与遍历 SDUT
- 数据结构实验之二叉树的建立与遍历