标签:
我们知道如何按照三种深度优先次序来周游一棵二叉树,来得到中根序列、前根序列和后根序列。反过来,如果给定二叉树的中根序列和后根序 列,或者给定中根序列和前根序列,可以重建一二叉树。本题输入一棵二叉树的中根序列和后根序列,要求在内存中重建二叉树,最后输出这棵二叉树的前根序列。
用不同的整数来唯一标识二叉树的每一个结点,下面的二叉树

中根序列是9 5 32 67
后根序列9 32 67 5
前根序列5 9 67 32
先读入一个数n代表中序和后序均有n个元素。
接着输入中序序列,在输入后序序列。
输出先序序列。
输入:
4
9 5 32 67
9 32 67 5
输出:
5 9 67 32
#include <stdio.h>
#include <string.h>
void build(int len, int *s1, int *s2, int *s)
{
int p;
int i;
if(len<=0)
return;
else{
for(i=0; i<len; i++){
if(s1[i]==s2[len-1]){
p = i;
}
}
build(p, s1, s2, s+1);
build(len-p-1, s1+p+1, s2+p, s+p+1);
s[0] = s2[len-1];
}
}
int main()
{
int i;
int s1[1000], s2[1000], s3[1000];
int n;
while(scanf("%d", &n)!=EOF)
{
for(i=0; i<n; i++){
scanf("%d", &s1[i] );
}
for(i=0; i<n; i++){
scanf("%d", &s2[i] );
}
build(n, s1, s2, s3 );
for(i=0; i<n; i++){
printf("%d%c", s3[i], i==n-1?‘\n‘:‘ ‘ );
}
}
return 0;
}
标签:
原文地址:http://www.cnblogs.com/yspworld/p/4460986.html