本题要求根据给定的一棵二叉树的后序遍历和中序遍历结果,输出该树的先序遍历结果。
输入格式:
第一行给出正整数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;
typedef int ElementType;
typedef struct TNode *BTree;
struct TNode{
ElementType Data;
BTree Left;
BTree Right;
};
int n, a[31], b[31];
void printTree(BTree root) {
if(root) {
cout<<" "<<root->Data;
if(root->Left) printTree(root->Left);
if(root->Right) printTree(root->Right);
}
}
BTree buildTree(int l1, int r1, int l2, int r2) {
if(l1 > r1) return NULL;
if(l2 > r2) return NULL;
BTree t = new TNode;
t->Data = b[r2];
int middle = l1;
while(a[middle] != b[r2]) middle++;
int leftLength = middle - l1;
t->Left = buildTree(l1, middle-1, l2, l2+leftLength-1);
t->Right = buildTree(middle+1, r1, l2+leftLength, r2-1);
return t;
}
int main() {
cin>>n;
for(int i = 0; i < n; i++) {
cin>>b[i];
}
for(int i = 0; i < n; i++) {
cin>>a[i];
}
BTree root = buildTree(0, n-1, 0, n-1);
cout<<"Preorder:";
printTree(root);
return 0;
}