数据结构实验之二叉树四:还原二叉树
2017-02-16 11:07
316 查看
数据结构实验之二叉树四:还原二叉树
Time Limit: 1000MS Memory Limit: 65536KB
Submit Statistic
Problem Description
给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。
Input
输入数据有多组,每组数据第一行输入1个正整数N(1 <= N <= 50)为树中结点总数,随后2行先后给出先序和中序遍历序列,均是长度为N的不包含重复英文字母(区分大小写)的字符串。
Output
输出一个整数,即该二叉树的高度。
Example Input
9
ABDFGHIEC
FDHGIBEAC
Example Output
5
Hint
大言不惭的说说水题。。虽然做的过程并不一帆风顺
Time Limit: 1000MS Memory Limit: 65536KB
Submit Statistic
Problem Description
给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。
Input
输入数据有多组,每组数据第一行输入1个正整数N(1 <= N <= 50)为树中结点总数,随后2行先后给出先序和中序遍历序列,均是长度为N的不包含重复英文字母(区分大小写)的字符串。
Output
输出一个整数,即该二叉树的高度。
Example Input
9
ABDFGHIEC
FDHGIBEAC
Example Output
5
Hint
大言不惭的说说水题。。虽然做的过程并不一帆风顺
#include <stdio.h> #include <stdlib.h> typedef struct node { char data; struct node *l,*r; }node; node *create(int len,char *pre,char *in)//老套路了,知道先序和中序搞出整棵树 { int i; node *root; if(len<=0) return NULL; else{ root = (node *)malloc(sizeof(struct node)); char x = pre[0]; root->data = x; for(i=0; i<len; i++){ if(in[i]==x) break; } root->l = create(i,pre+1,in); root->r = create(len-i-1,pre+i+1,in+i+1); } return root; } int deep(node *root)//求深度的话,就看左右子树哪个更深就返回哪个的深度,最后加个1就是整棵树的深度了 { int d = 1; if(root){ int dl = deep(root->l); int dr = deep(root->r); d = dl>dr?dl+1:dr+1; } else return 0;//一定到最后没有左右子树的话要返回0,这样就不会又加1了 return d; } int main() { int len; char pre[100],in[100]; while(~scanf("%d",&len)){ scanf("%s %s",pre,in); node *root = create(len,pre,in); printf("%d\n",deep(root)); } return 0; }
相关文章推荐
- 数据结构实验之二叉树四:还原二叉树
- 数据结构实验之二叉树四:还原二叉树
- 数据结构实验之二叉树四:(先序中序)还原二叉树
- 3343 数据结构实验之二叉树四:(先序中序)还原二叉树
- 数据结构实验之二叉树四:还原二叉树
- 数据结构实验之二叉树四:还原二叉树 (sdut oj 3343)
- 3343 数据结构实验之二叉树四:(先序中序)还原二叉树
- [SDUT](3343)数据结构实验之二叉树四:(先序中序)还原二叉树
- 数据结构实验之二叉树四:还原二叉树
- 数据结构实验之二叉树四:还原二叉树
- 数据结构实验之二叉树四:还原二叉树
- 数据结构实验之二叉树四:还原二叉树
- 数据结构实验之二叉树四:(先序中序)还原二叉树
- sdutacm-数据结构实验之二叉树四:还原二叉树
- 数据结构实验之二叉树四:还原二叉树
- 数据结构实验之二叉树四:还原二叉树
- 数据结构实验之二叉树四:还原二叉树
- SDUTACM 数据结构实验之二叉树四:还原二叉树
- 数据结构实验之二叉树四:还原二叉树
- 数据结构实验之二叉树四:(先序中序)还原二叉树