给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。
输入格式:
输入首先给出正整数N(≤50),为树中结点总数。下面两行先后给出先序和中序遍历序列,均是长度为N的不包含重复英文字母(区别大小写)的字符串。
输出格式:
输出为一个整数,即该二叉树的高度。
输入样例:
9
ABDFGHIEC
FDHGIBEAC
输出样例:
5
思路:
其实就是(先序中序两种序列确定唯一的二叉树),再加一个求二叉树的深度。主要思路及内容都是递归。
错误:此题的二叉树存储的字符,注意字符串缓存区的问题,否则读入的第二个序列读入的是‘\n’
主要还是读入的问题!!!
#include<bits/stdc++.h>
using namespace std;
string pre,in;
struct bt{
char data;
struct bt *lchild;
struct bt *rchild;
};
bt* create(int prel,int prer,int inl,int inr)
{
bt* root=new bt;
if(prel>prer)
{
return NULL;
}
root->data=pre[prel];
int k;
for(k=inl;k<=inr;k++)
{
if(in[k]==pre[prel])
{
break;
}
}
int numleft=k-inl;
root->lchild=create(prel+1,prel+numleft,inl,k-1);
root->rchild=create(prel+numleft+1,prer,k+1,inr);
return root;
}
int Depth(bt* T)
{
int m=0;
int n=0;
if(T==NULL) return 0;
else{
m=Depth(T->lchild);
n=Depth(T->rchild);
return max(m,n)+1;
}
}
int main()
{
int n;
scanf("%d",&n);
cin >> pre;
cin >> in;
bt* T=create(0,n-1,0,n-1);
printf("%d",Depth(T));
return 0;
}