使用c++实现根据一棵二叉树的中序遍历序列和后序遍历序列,求这棵树的前序遍历序列的代码
时间: 2024-05-12 11:17:43 浏览: 103
以下是使用C语言实现根据一棵二叉树的中序遍历序列和后序遍历序列,求这棵树的前序遍历序列的代码:
```c
#include <stdio.h>
#include <stdlib.h>
struct Node {
int val;
struct Node* left;
struct Node* right;
};
struct Node* buildTree(int* inorder, int inorderSize, int* postorder, int postorderSize) {
if (inorderSize == 0) {
return NULL;
}
int rootValue = postorder[postorderSize - 1];
struct Node* rootNode = (struct Node*)malloc(sizeof(struct Node));
rootNode->val = rootValue;
int rootPos;
for (int i = 0; i < inorderSize; i++) {
if (inorder[i] == rootValue) {
rootPos = i;
break;
}
}
int leftSize = rootPos;
int rightSize = inorderSize - 1 - rootPos;
rootNode->left = buildTree(inorder, leftSize, postorder, leftSize);
rootNode->right = buildTree(inorder + rootPos + 1, rightSize, postorder + leftSize, rightSize);
return rootNode;
}
void preorder(struct Node* root) {
if (root == NULL) {
return;
}
printf("%d ", root->val);
preorder(root->left);
preorder(root->right);
}
int main() {
int inorder[] = {4, 2, 5, 1, 6, 3};
int postorder[] = {4, 5, 2, 6, 3, 1};
int size = sizeof(inorder) / sizeof(inorder[0]);
struct Node* root = buildTree(inorder, size, postorder, size);
printf("Preorder traversal of the constructed tree: \n");
preorder(root);
return 0;
}
```
以上代码为我们提供了一个 `buildTree` 函数,该函数可以接收中序遍历序列和后序遍历序列,来构建出该棵树的根节点。然后我们可以使用 `preorder` 函数对构建好的二叉树进行前序遍历,找出前序遍历序列。
阅读全文