解题思路:
通过前序序列和中序序列我们可以知道根节点,之后使用递归的方法构建二叉树的二叉链表。
构建二叉树的基本思路如下:
从前序序列中获取根节点的值(前序序列第一个节点就是根节点),并创建一个根节点。
在中序序列中找到根节点的位置,该位置将中序序列分为左子树和右子树。
根据左子树的长度,将前序序列和中序序列分为左子树的前序序列、左子树的中序序列、右子树的前序序列和右子树的中序序列。
递归地构建左子树和右子树,将左子树和右子树分别作为当前根节点的左孩子和右孩子。
返回当前根节点,即为所求二叉链表的根节点。
之后后序遍历二叉树即可得到后序序列。即先递归遍历左子树,再递归遍历右子树,最后输出根节点的值。
具体操作见代码,代码中有部分注释。
题解代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct TreeNode {
char val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
TreeNode* build_tree(char* preorder, char* inorder