输入一颗二叉树的先序和中序遍历序列,输出其后序遍历序列,C语言
时间: 2023-07-24 20:38:17 浏览: 160
以下是一种C语言实现方式:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
// 定义二叉树结点结构体
typedef struct TreeNode {
char val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 根据先序和中序遍历序列构建二叉树
TreeNode* buildTree(char* preorder, char* inorder, int size) {
if (size == 0) {
return NULL;
}
// 从先序遍历序列中取出根节点的值
char root_val = *preorder;
// 在中序遍历序列中查找根节点的值
int root_index;
for (root_index = 0; root_index < size; root_index++) {
if (*(inorder + root_index) == root_val) {
break;
}
}
// 创建根节点
TreeNode* root = malloc(sizeof(TreeNode));
root->val = root_val;
// 递归构建左子树
root->left = buildTree(preorder + 1, inorder, root_index);
// 递归构建右子树
root->right = buildTree(preorder + root_index + 1, inorder + root_index + 1, size - root_index - 1);
return root;
}
// 后序遍历二叉树
void postorderTraversal(TreeNode* root) {
if (root == NULL) {
return;
}
postorderTraversal(root->left);
postorderTraversal(root->right);
printf("%c ", root->val);
}
int main() {
char preorder[MAX_SIZE] = {'A', 'B', 'D', 'E', 'C', 'F'};
char inorder[MAX_SIZE] = {'D', 'B', 'E', 'A', 'F', 'C'};
int size = 6;
TreeNode* root = buildTree(preorder, inorder, size);
postorderTraversal(root);
return 0;
}
```
在这个程序中,我们首先定义了一个 `TreeNode` 结构体,用来表示二叉树的结点。然后定义了一个 `buildTree` 函数,用来根据先序和中序遍历序列构建二叉树。最后定义了一个 `postorderTraversal` 函数,用来后序遍历二叉树。在 `main` 函数中,我们使用给定的先序和中序遍历序列构建二叉树,并输出后序遍历序列。
阅读全文