给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。
输入格式:
输入首先给出正整数N(≤50),为树中结点总数。下面两行先后给出先序和中序遍历序列,均是长度为N的不包含重复英文字母(区别大小写)的字符串。
输出格式:
输出为一个整数,即该二叉树的高度。
输入样例:
9
ABDFGHIEC
FDHGIBEAC
输出样例:
5
#include<iostream>
#include<algorithm>
#include<queue>
#include<cstdio>
#include<cstring>
#include<cstdlib>
using namespace std;
char mid[51],fir[51];
typedef struct Node{
char t;
struct Node *left;
struct Node *right;
}Bi,*BiNode;
BiNode S(int beg1, int end1, int beg2, int end2)
{
BiNode r = (BiNode)malloc(sizeof(Node));
r->left=NULL;
r->right=NULL;
r->t=fir[beg1];
for(int i=beg2;i<=end2;i++){
if(fir[beg1]==mid[i]){
if(i!=beg2)
r->left=S(beg1+1,beg1+i-beg2,beg2,i-1);
if(i!=end2)
r->right=S(beg1+i-beg2+1,end1,i+1,end2);
break;
}
}
return r;
}
int high(BiNode b){
if(b==NULL){
return 0;
}
return (high(b->left)+1)>=(high(b->right)+1)?(high(b->left)+1):(high(b->right)+1);
}
void BL(BiNode b){
if(b==NULL)
return ;
printf("%c",b->t);
BL(b->left);
BL(b->right);
}
int main()
{
int a;
cin>>a>>fir>>mid;
BiNode r= S(0,a-1,0,a-1);
// BL(r);
cout<<high(r)<<endl;
}