Leetcode: NO.106 从中序与后序遍历序列构造二叉树

题目

根据一棵树的中序遍历与后序遍历构造二叉树。

注意:
你可以假设树中没有重复的元素。

例如,给出中序遍历 inorder = [9,3,15,20,7]
后序遍历 postorder = [9,15,7,20,3]
返回如下的二叉树:3/ \9  20/  \15   7

链接:https://leetcode-cn.com/problems/construct-binary-tree-from-inorder-and-postorder-traversal

解题记录

  • 因为没有重复序列,鉴于中序遍历父节点的位置正好将左右两树分开,通过map记录下中序遍历中节点值和index的映射关系
  • 后续遍历从后向前的顺序是,父->右->左
  • 通过后续遍历逆向或取节点,最后一个一定是根节点,通过map获取到根节点的位置,通过根节点位置分割,根节点左边就是左树,根节点右边就是右树
  • 以此递归下去获取全树
/*** @author: ffzs* @Date: 2020/9/25 上午7:23*/class TreeNode {int val;TreeNode left;TreeNode right;TreeNode(int x) { val = x; }
}public