【二叉树的建立和遍历】SDUTOJ 2136---数据结构实验之二叉树的建立与遍历
2014-07-31 20:49
549 查看
数据结构实验之二叉树的建立与遍历
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
已知一个按先序序列输入的字符序列,如abc,,de,g,,f,,,(其中逗号表示空节点)。请建立二叉树并按中序和后序方式遍历二叉树,最后求出叶子节点个数和二叉树深度。输入
输入一个长度小于50个字符的字符串。输出
输出共有4行:第1行输出中序遍历序列;
第2行输出后序遍历序列;
第3行输出叶子节点个数;
第4行输出二叉树深度。
示例输入
abc,,de,g,,f,,,
示例输出
cbegdfacgefdba35
基础模板题。。。
代码:
#include<stdio.h> #include<string.h> #include<stdlib.h> typedef struct node { char c; struct node *l, *r; }tree; char str[1000]; int i; tree *build() { tree *p; if(str[i] == ',') { i ++; return NULL; } p = (tree *)malloc(sizeof(tree)); p -> c = str[i]; i++; p -> l = build(); p -> r = build(); return p; } void midsearch(tree *head) { if(head == NULL) return ; midsearch(head -> l); printf("%c",head -> c); midsearch(head -> r); } void lastsearch(tree *head) { if(head == NULL) return ; lastsearch(head -> l); lastsearch(head -> r); printf("%c",head -> c); } int leafs(tree *head) { if(head == NULL) return 0; if(head -> l == NULL && head -> r == NULL) return 1; else return (leafs(head ->l) + leafs(head -> r)); } int deep(tree *head) { int m, n; if(head == NULL) return 0; m = deep(head -> l); n = deep(head -> r); if(m > n) return m+1; else return n+1; } int main() { tree *head; int leaf; gets(str); i=0; head = build(); midsearch(head); printf("\n"); lastsearch(head); printf("\n"); printf("%d\n",leafs(head)); printf("%d\n",deep(head)); return 0; }
相关文章推荐
- SDUTOJ 2136 数据结构实验之二叉树的建立与遍历
- 2136数据结构实验之二叉树的建立与遍历
- SDUT-2136 数据结构实验之二叉树的建立与遍历
- SDUT-2136数据结构实验之二叉树的建立与遍历
- sdut 2136 数据结构实验之二叉树的建立与遍历(二叉树遍历,叶子数和深度)
- SDUT 2136 数据结构实验之二叉树的建立与遍历
- 2136-->数据结构实验之二叉树的建立与遍历
- sdut 2136 数据结构实验之二叉树的建立与遍历
- SDUT 2136 数据结构实验之二叉树的建立与遍历
- 2136 数据结构实验之二叉树的建立与遍历
- SDUT-2136 数据结构实验之二叉树的建立与遍历
- 2136 数据结构实验之二叉树的建立与遍历
- SDUT 2136 数据结构实验之二叉树的建立与遍历
- [SDUT](2136)数据结构实验之二叉树的建立与遍历 ---- 二叉树
- 暑假集训 8.8 sdut2136 数据结构实验之二叉树的建立与遍历
- SDUT 2136 数据结构实验之二叉树的建立与遍历
- 数据结构实验之二叉树的建立与遍历
- 寒假训练--树与二叉树--数据结构实验之二叉树的建立与遍历
- 【2136】数据结构实验之二叉树的建立与遍历 SDUTOJ
- 数据结构实验之二叉树的建立与遍历