题目描述
给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。
题目示例
输入:inorder = [9,3,15,20,7], postorder = [9,15,7,20,3]
输出:[3,9,20,null,null,15,7]
解题思路
参考代码
class Solution {int post_idx;int[] postorder;int[] inorder;Map<Integer, Integer> idx_map = new HashMap<>();public TreeNode buildTree(int[] inorder, int[] postorder) {this.postorder = postorder;this.inorder = inorder;// 从后序遍历的最后一个元素开始post_idx = postorder.length - 1;// 建立 元素 下标 对应的哈希表int idx = 0;for(Integer val : inorder) {idx_map.put(val, idx++);}return helper(0, inorder.length - 1);}public TreeNode helper(int in_left, int in_right) {// 如果这里没有节点构造二叉树了,就结束if(in_left > in_right) {return null;}// 选择post_idx位置的元素作为当前子树根节点int root_val = postorder[post_idx];TreeNode root = new TreeNode(root_val);// 根据root所在位置分成左右两颗子树int index = idx_map.get(root_val);// 下标减一post_idx--;// 构造右子树root.right = helper(index + 1, in_right);// 构造左子树root.left = helper(in_left, index - 1);return root;}
}