【HDU1710】树的遍历

题目大意:给定一棵 N 个节点的二叉树的前序遍历和中序遍历,求其后序遍历。

题解:递归操作,每次只需知道先序遍历和中序遍历的开始点,左子树大小即可,根据前序遍历的开始位置可知子树根节点的坐标,再在中序遍历中找到对应的左子树大小,递归操作下去,一棵二叉树就被完全地确定下来了。

代码如下

#include <bits/stdc++.h>
using namespace std;
const int maxn=1010; int n,pre[maxn],mid[maxn]; void read_and_parse(){
for(int i=1;i<=n;i++)scanf("%d",&pre[i]);
for(int i=1;i<=n;i++)scanf("%d",&mid[i]);
} void dfs(int a,int b,int n,int tag){
int i;
if(n<=0)return;
for(i=0;pre[a]!=mid[b+i];i++);
dfs(a+1,b,i,0);
dfs(a+i+1,b+i+1,n-i-1,0);
printf("%d",pre[a]);
if(!tag)printf(" ");
else puts("");
} void solve(){
dfs(1,1,n,1);
} int main(){
while(scanf("%d",&n)!=EOF){
read_and_parse();
solve();
}
return 0;
}
上一篇:git config配置文件 (共有三个配置文件)


下一篇:MySQL日期数据类型总结