数据算法实验利用c++代码实现:输入格式: 两行。第一行是二叉树的前序遍历序列,第二行是中序遍历序列。每个数字表示的结点之间用空格隔开。 输出格式: 一行。由输入中的前序列和中序遍历序列重建的二叉树的后序遍历序列。每个数字表示的结点之间用空格隔开
时间: 2023-05-30 07:02:54 浏览: 107
#include <stdio.h>
#include <stdlib.h>
struct node {
int value;
struct node *left;
struct node *right;
};
// 根据前序遍历和中序遍历序列构建二叉树
struct node *build_tree(int *preorder, int *inorder, int len) {
if (len == 0) {
return NULL;
}
struct node *root = (struct node*) malloc(sizeof(struct node));
root->value = *preorder;
int i;
for (i = 0; i < len; i++) {
if (*(inorder + i) == *preorder) {
break;
}
}
root->left = build_tree(preorder + 1, inorder, i);
root->right = build_tree(preorder + i + 1, inorder + i + 1, len - i - 1);
return root;
}
// 后序遍历二叉树
void postorder(struct node *root) {
if (root == NULL) {
return;
}
postorder(root->left);
postorder(root->right);
printf("%d ", root->value);
}
int main() {
int n, *preorder, *inorder;
scanf("%d", &n);
preorder = (int*) malloc(n * sizeof(int));
inorder = (int*) malloc(n * sizeof(int));
for (int i = 0; i < n; i++) {
scanf("%d", preorder + i);
}
for (int i = 0; i < n; i++) {
scanf("%d", inorder + i);
}
struct node *root = build_tree(preorder, inorder, n);
postorder(root);
printf("\n");
return 0;
}
阅读全文