c语言已知二叉树的先序遍历和中序遍历,求二叉树的后序遍历
时间: 2024-10-12 20:02:11 浏览: 45
已知二叉树的先序遍历和中序遍历,可以通过以下步骤求出二叉树的后序遍历:
1. 首先,根据先序遍历的第一个元素确定根节点。
2. 在中序遍历中找到根节点的位置,将数组分为左子树和右子树。
3. 递归地对左子树和右子树进行相同的操作,得到它们的后序遍历。
4. 将左子树、右子树和根节点按照后序遍历的顺序连接起来。
下面是一个C语言实现的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct TreeNode {
char val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
TreeNode* buildTree(char* preorder, char* inorder, int len) {
if (len == 0) return NULL;
TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode));
root->val = preorder[0];
int i;
for (i = 0; i < len; i++) {
if (inorder[i] == preorder[0]) break;
}
root->left = buildTree(preorder + 1, inorder, i);
root->right = buildTree(preorder + i + 1, inorder + i + 1, len - i - 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[] = {'A', 'B', 'D', 'E', 'C', 'F'};
char inorder[] = {'D', 'B', 'E', 'A', 'F', 'C'};
int len = sizeof(preorder) / sizeof(preorder[0]);
TreeNode* root = buildTree(preorder, inorder, len);
postorderTraversal(root);
return 0;
}
```
这段代码首先定义了一个二叉树结构体`TreeNode`,然后实现了一个`buildTree`函数,该函数根据给定的先序遍历和中序遍历构建二叉树。最后,`postorderTraversal`函数用于输出二叉树的后序遍历结果。
阅读全文