本题要求根据给定的一棵二叉树的后序遍历和中序遍历结果,输出该树的先序遍历结果。 输入格式: 第一行给出正整数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用c语言
时间: 2024-02-13 09:05:48 浏览: 62
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXN 1000
typedef struct TreeNode *BinTree;
struct TreeNode {
int Data;
BinTree Left;
BinTree Right;
};
int N, Post[MAXN], In[MAXN];
BinTree BuildTree(int postL, int postR, int inL, int inR) {
if (postL > postR) {
return NULL;
}
BinTree root = (BinTree)malloc(sizeof(struct TreeNode));
root->Data = Post[postR];
int k;
for (k = inL; k <= inR; k++) {
if (In[k] == root->Data) {
break;
}
}
int numLeft = k - inL;
root->Left = BuildTree(postL, postL + numLeft - 1, inL, k - 1);
root->Right = BuildTree(postL + numLeft, postR - 1, k + 1, inR);
return root;
}
void PreorderTraversal(BinTree BT) {
if (BT == NULL) {
return;
}
printf("%d ", BT->Data);
PreorderTraversal(BT->Left);
PreorderTraversal(BT->Right);
}
int main() {
scanf("%d", &N);
for (int i = 0; i < N; i++) {
scanf("%d", &Post[i]);
}
for (int i = 0; i < N; i++) {
scanf("%d", &In[i]);
}
BinTree BT = BuildTree(0, N - 1, 0, N - 1);
printf("Preorder: ");
PreorderTraversal(BT);
return 0;
}
```
阅读全文