本题要求根据给定的一棵二叉树的后序遍历和中序遍历结果,输出该树的先序遍历结果。
输入格式:
第一行给出正整数 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<stdio.h>
int node,inorder[64],i,postorder[64];
void display(int left,int right){
int r,c;
if(left>right)return;
for(r=node-1;r>-1;r--)for(c=right;c>=left;c--)if(postorder[r]==inorder[c]){
printf(" %d",postorder[r]);
display(left,c-1);
display(c+1,right);
return;
}
}
int main(){
scanf("%d",&node);
for(i=0;i<node;i++)scanf("%d",postorder+i);
for(i=0;i<node;i++)scanf("%d",inorder+i);
printf("Preorder:");
display(0,node-1);
return 0;
}