知道二叉树的先序序列和中序序列求后序序列求这颗二叉树用c语言实现
时间: 2024-01-23 16:49:00 浏览: 66
利用c语言实现一颗二叉树的功能
可以使用递归算法来实现。先序序列中第一个元素为根节点,在中序序列中找到对应的元素位置,该元素左侧为左子树的中序序列,右侧为右子树的中序序列。由于先序序列中的第二个元素为左子树的根节点,因此可以在左子树的中序序列中找到左子树的根节点,同理可以找到右子树的根节点。递归实现左子树和右子树的构建,最后将根节点加入后序序列中即可得到完整的后序序列。
具体实现如下:
```c
#include <stdio.h>
#include <string.h>
char postorder[50]; // 存储后序序列
int index; // 后序序列当前插入位置
struct TreeNode {
char val; // 节点值
struct TreeNode *left; // 左子树指针
struct TreeNode *right; // 右子树指针
};
// 递归构建二叉树
struct TreeNode* buildTree(char* preorder, char* inorder, int size) {
if (size <= 0) {
return NULL;
}
// 创建根节点
struct TreeNode* root = (struct TreeNode*)malloc(sizeof(struct TreeNode));
root->val = *preorder;
// 在中序序列中找到根节点位置
int rootIndex = 0;
while (rootIndex < size) {
if (*(inorder+rootIndex) == *preorder) {
break;
}
rootIndex++;
}
// 递归构建左子树和右子树
root->left = buildTree(preorder+1, inorder, rootIndex);
root->right = buildTree(preorder+1+rootIndex, inorder+rootIndex+1, size-rootIndex-1);
// 将根节点加入后序序列
postorder[index++] = root->val;
return root;
}
int main() {
char preorder[] = {'A','B','D','E','C','F','G'};
char inorder[] = {'D','B','E','A','F','C','G'};
index = 0;
struct TreeNode* root = buildTree(preorder, inorder, strlen(preorder));
printf("后序序列: %s\n", postorder);
return 0;
}
```
阅读全文