HELLO WORLD--一起加油(🍺)!|

kingwzun

园龄:3年6个月粉丝:111关注:0

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;
}

本文作者:kingwzun

本文链接:https://www.cnblogs.com/kingwz/p/15723873.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   kingwzun  阅读(261)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起