知道二叉树的先序序列和中序序列求后序序列,用c语言实现
时间: 2023-12-08 19:01:07 浏览: 135
好的,针对您的问题,可以先将先序序列和中序序列还原成二叉树,然后再得到后序序列。下面是实现的步骤和代码:
步骤:
1. 从先序序列中取出第一个元素作为根节点;
2. 在中序序列中找到根节点的位置,将中序序列分成两部分,左边部分为左子树的中序序列,右边部分为右子树的中序序列;
3. 由左子树的中序序列,可以得到左子树的先序序列(即先序序列中根节点后面相邻的元素);
4. 由左子树的先序序列和中序序列,递归构造左子树;
5. 由右子树的中序序列,可以得到右子树的先序序列(即先序序列中根节点后面不相邻的元素);
6. 由右子树的先序序列和中序序列,递归构造右子树;
7. 最终得到的二叉树,对其进行后序遍历,即可得到后序序列。
代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void post_order(char* pre, char* in, int len) {
if (len <= 0) {
return;
}
char root = pre[0];
int root_idx = 0;
while (root_idx < len && in[root_idx] != root) {
root_idx++;
}
post_order(pre + 1, in, root_idx);
post_order(pre + root_idx + 1, in + root_idx + 1, len - root_idx - 1);
printf("%c ", root);
}
int main() {
char pre[] = "GDAFEMHZ";
char in[] = "ADEFGHMZ";
int len = strlen(pre);
printf("The post order sequence is: ");
post_order(pre, in, len);
printf("\n");
return 0;
}
```
输出结果:
```c
The post order sequence is: AEFDHZMG
```
阅读全文