一:题目描述
给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。
二:示例与提示
示例 1:

1 | 输入:inorder = [9,3,15,20,7], postorder = [9,15,7,20,3] |
示例 2:
1 | 输入:inorder = [-1], postorder = [-1] |
提示:
1 <= inorder.length <= 3000postorder.length == inorder.length-3000 <= inorder[i], postorder[i] <= 3000inorder和postorder都由 不同 的值组成postorder中每一个值都在inorder中inorder保证是树的中序遍历postorder保证是树的后序遍历
三:思路
递归构造二叉树
- 中序遍历顺序是,左中右
- 后序遍历顺序是,左右中
- 因此,可以通过后序遍历可以先知道,根节点是什么,再在中序中,通过根节点知道左右两区间也就是左右子树
- 依次遍历就将二叉树构造出来了

- 根据前序遍历来构造二叉树的具体步骤:中,左,右
- 判断终止条件(递归优先步),当中序遍历数组为空时候,返回空节点
- 找到根节点,对根节点进行操作(中),即找到后序遍历数组中最后一个元素
- 寻找根节点在中序遍历数组中的下标索引index,通过index索引对两个序列数组切割左右子树,也作为递归的新参数
- 分割中序遍历数组,通过slice方法对其进行分割左右区间,注意slice区间范围左闭右开
- 分割后序遍历数组
- 递归处理左右区间(左、右),node.left,node.right指向左右子树
- 最终返回node
四:代码
1 | /** |