数据结构实验之二叉树四:还原二叉树
Time Limit: 1000MS
Memory Limit: 65536KB
Problem Description
给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。
Input
输入数据有多组,每组数据第一行输入
1
个正整数
N(1 <= N <= 50)
为树中结点总数,随后
2
行先后给出先序和中序遍历序列,均是长度为
N
的不包含重复英文字母
(
区分大小写
)
的字符串。
Output
输出一个整数,即该二叉树的高度。
Example Input
9 ABDFGHIEC FDHGIBEAC
Example Output
5
#include<stdio.h> struct node { int data; struct node*l,*r; }; struct node*creat(char *pre,char *in,int n) { int i; for(i=0;i<n;i++) { if(pre[0]==in[i]) { struct node *t; t=new node; t->data=in[i]; t->l=creat(pre+1,in,i); t->r=creat(pre+i+1,in+i+1,n-i-1); return t; } } return NULL; }; void last(struct node*t) { if(t) { last(t->l); last(t->r); printf("%c",t->data); } } int deep(struct node *root) { if(!root) return 0; int l=deep(root->l); int r=deep(root->r); return l>r?l+1:r+1; } int main() { int n; char pre[110],in[110]; while(~scanf("%d",&n)) { scanf("%s%s",pre,in); struct node *root; root=creat(pre,in,n); //last(root); printf("%d\n",deep(root)); } }