题目描述
返回与给定的前序和后序遍历匹配的任何二叉树。
pre 和 post 遍历中的值是不同的正整数。
示例:==
输入:pre = [1,2,4,5,3,6,7], post = [4,5,2,6,7,3,1]
输出:[1,2,3,4,5,6,7]
依据题意:
前序遍历(中 - 左 - 右)
后序遍历(左 - 右 - 中)
一般来说,给定二叉树的任意的两个遍历结果,我们都可以重建二叉树。
解题思路
通过前序遍历的结果建立二叉树(使用递归),
通过后序遍历的结果验证是否到达了左右叶子结点(当前节点 root.val == post[index])。
技巧:通过前序遍历结果建立二叉树比较方便,因为前序遍历的第一个就是二叉树的根节点
关键
前序遍历 中左右
后序遍历 左右中
前序遍历 先递归创建节点
在左右孩子递归完成后,将后序遍历的的索引后移一位
解题代码(有注释版)
class Solution {
// 新建两个下标,分别指向前序遍历结果和后序遍历结果
int preIndex = 0;
int postIndex = 0;
public TreeNode constructFromPrePost(int[] pre, int[] post) {