7-1 根据后序和中序遍历输出先序遍历 (25 分)
本题要求根据给定的一棵二叉树的后序遍历和中序遍历结果,输出该树的先序遍历结果。
输入格式:
第一行给出正整数N(≤30),是树中结点的个数。随后两行,每行给出N个整数,分别对应后序遍历和中序遍历结果,数字间以空格分隔。题目保证输入正确对应一棵二叉树。
输出格式:
在一行中输出Preorder:以及该树的先序遍历结果。数字间有1个空格,行末不得有多余空格。
输入样例:
7
2 3 1 5 7 6 4
1 2 3 4 5 6 7
输出样例:
Preorder: 4 1 3 2 6 5 7
#include<bits/stdc++.h>
using namespace std;
#define MAXSIZE 100
typedef int TElemType;
typedef struct BiNode{
TElemType data;
struct BiNode *lchild, *rchild;
}BiNode, *BiTree;
BiTree Build(int *in, int *post, int n){ /// in是中序遍历结果, post是后序遍历结果
if(n <= 0) return NULL;
int *p = in;
while(p){
if(*p == *(post + n - 1))
break;
p++;
}
BiTree T = new BiNode;
T->data = *p;
int len = p - in;
T->lchild = Build(in, post, len);
T->rchild = Build( p + 1, post + len, n - len - 1);
return T;
}
void PreOrder(BiTree T){
if(T){
printf(" %d", T->data);
PreOrder(T->lchild);
PreOrder(T->rchild);
}
return ;
}
int main()
{
int n;
int pre[110], in[110];
BiTree T;
scanf("%d", &n);
for(int i=0; i<n; i++){
scanf("%d", &in[i]); //后序遍历
}
for(int i=0; i<n; i++){
scanf("%d", &pre[i]); //中序遍历
}
T = Build(pre, in, n);
printf("Preorder:");
PreOrder(T);
return 0;
}
诸:代码是在csdn上学的,可能有转载的成分,希望看到的读者可以在下面评论帮我找到原著,我是本着学习的目的。
递归的方式建树。