7-1 还原二叉树 (25 分)
题目:
给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。
代码1:
#include<bits/stdc++.h>
using namespace std;
int dfs(char a[],char b[],int n){
int i;
if(n==0)return 0;
for(i=0;i<n;i++){
if(b[i]==a[0]){
break;
}
}
int x=dfs(a+1,b,i)+1;//求左子树的深度
int y=dfs(a+i+1,b+i+1,n-i-1)+1;//求右子树的深度
return x>y?x:y;
}
int main()
{
char a[101];
char b[101];
int n;
cin>>n;
cin>>a>>b;
int cnt=dfs(a,b,n);
cout<<cnt<<endl;
}
代码2:
#include <bits/stdc++.h>
using namespace std;
struct btnode {
char value;
btnode *lc;
btnode *rc;
};
char pre[55];
char pos[55];
int n;
int ans=0;
btnode* buildtree(char pre[],char pos[],int n,int cnt)
{
if(n==0) return NULL;
btnode *F=new btnode;
int root=pre[0];
F->value=root;
int k=0;
for(int i=0;i<n;i++)
{
if(pos[i]==root)
{
k=i;
break;
}
}
cnt++;
F->lc=buildtree(pre+1,pos,k,cnt);
if(F->lc){
ans=max(cnt,ans);
}
F->rc=buildtree(pre+k+1,pos+k+1,n-k-1,cnt);
if(F->rc){
ans=max(cnt,ans);
}
return F;
}
int main()
{
cin>>n;
cin>>pre;
cin>>pos;
// cout<<ans;
btnode *F=buildtree(pre,pos,n,1);
if(n==1) ans=1;
cout<<ans;
return 0;
}