Problem Descriptionnode
给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。
Inputide
输入数据有多组,每组数据第一行输入1个正整数N(1 <= N <= 50)为树中结点总数,随后2行前后给出先序和中序遍历序列,均是长度为N的不包含重复英文字母(区分大小写)的字符串。3d
Outputcode
输出一个整数,即该二叉树的高度。
Sample Inputblog
9
ABDFGHIEC
FDHGIBEAC
Sample Output图片
5ip
#include<stdio.h> #include<stdlib.h> struct node { char data; struct node *l,*r; }; struct node *creat(int n,char a[],char b[]) { struct node *root; char *p; if(n==0) return NULL; root=(struct node *)malloc(sizeof(struct node)); root->data=a[0]; for(p=b;p!='\0';p++) { if(*p==a[0]) { break; } } int t; t=p-b; root->l=creat(t,a+1,b); root->r=creat(n-t-1,a+t+1,p+1); return root; }; int deep(struct node *root) { int d=0; if(root) { int l1=deep(root->l); int l2=deep(root->r); if(l1>l2) { d=l1+1; } else { d=l2+1; } } return d; } int main() { int n,m; char a[100],b[100]; while(scanf("%d",&n)!=EOF) { struct node *root; scanf("%s",a); scanf("%s",b); root=creat(n,a,b); m=deep(root); printf("%d\n",m); } return 0; }