資料結構實驗之二叉樹四:(先序中序)還原二叉樹
阿新 • • 發佈:2018-12-20
Problem Description
給定一棵二叉樹的先序遍歷序列和中序遍歷序列,要求計算該二叉樹的高度。 Input
輸入資料有多組,每組資料第一行輸入1個正整數N(1 <= N <= 50)為樹中結點總數,隨後2行先後給出先序和中序遍歷序列,均是長度為N的不包含重複英文字母(區分大小寫)的字串。
Output
輸出一個整數,即該二叉樹的高度。 Sample Input
9 ABDFGHIEC FDHGIBEAC Sample Output
5
#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; }