数据结构实验之二叉树四:还原二叉树
2016-10-20 13:59
543 查看
数据结构实验之二叉树四:还原二叉树
Time Limit: 1000MSMemory Limit: 65536KB
SubmitStatistic
Problem Description
给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。Input
输入数据有多组,每组数据第一行输入1个正整数N(1 <= N <= 50)为树中结点总数,随后2行先后给出先序和中序遍历序列,均是长度为N的不包含重复英文字母(区分大小写)的字符串。Output
输出一个整数,即该二叉树的高度。Example Input
9 ABDFGHIEC FDHGIBEAC
Example Output
5
Hint
Author
xamSDUTACM运维技术中心
Copyright © 2013-2014 SDUTACM Team. All Rights Reserved.
<pre name="code" class="cpp">#include <iostream> #include <cstdio> using namespace std; struct tree { char data; tree *l, *r; }; char a[50+5], b[50+5]; int n, ans; tree *creat(int s1, int e1, int s2, int e2) { tree *root; int i=s2; while(i<=e2) { if(b[i]==a[s1]) break; i++; } if(s1==e1&&s2==e2&&a[s1]==b[s2]) { root=new tree; root->data=a[s1]; root->l=NULL; root->r=NULL; } else if(i>e2) root=NULL; else { root=new tree; root->data=a[s1]; root->l=creat(s1+1,s1+i-s2,s2,i-1); root->r=creat(s1+i-s2+1,e1,i+1,e2); } return root; } void pre_order(tree *root) { if(root) { printf("%c", root->data); if(root->l) pre_order(root->l); if(root->r) pre_order(root->r); } } void tree_height(tree *root,int h) { if(h>ans) ans=h; if(root->l) tree_height(root->l,h+1); if(root->r) tree_height(root->r,h+1); } int main() { while(~scanf("%d", &n)) { scanf("%s %s", a, b); tree *root=creat(0,n-1,0,n-1); //pre_order(root); //printf("*\n"); ans=1; tree_height(root,1); printf("%d\n", ans); } return 0; }
相关文章推荐
- SDUT-3343 数据结构实验之二叉树四:(先序中序)还原二叉树
- 数据结构实验之二叉树四:还原二叉树
- 数据结构实验之二叉树四:(先序中序)还原二叉树
- 3343 数据结构实验之二叉树四:(先序中序)还原二叉树
- 数据结构实验之二叉树四:还原二叉树
- 数据结构实验之二叉树四:还原二叉树 (sdut oj 3343)
- 3343 数据结构实验之二叉树四:(先序中序)还原二叉树
- [SDUT](3343)数据结构实验之二叉树四:(先序中序)还原二叉树
- 数据结构实验之二叉树四:还原二叉树
- 数据结构实验之二叉树四:还原二叉树
- 数据结构实验之二叉树四:还原二叉树
- 数据结构实验之二叉树四:还原二叉树
- 数据结构实验之二叉树四:(先序中序)还原二叉树
- 数据结构实验之二叉树四:还原二叉树
- 数据结构实验之二叉树四:还原二叉树
- 数据结构实验之二叉树四:还原二叉树
- 数据结构实验之二叉树四:还原二叉树
- SDUTACM 数据结构实验之二叉树四:还原二叉树
- 数据结构实验之二叉树四:还原二叉树
- 数据结构实验之二叉树四:(先序中序)还原二叉树