//JS版本的代码
var buildTree = function(inorder, postorder) {
let post_idx;
const idx_map = new Map();
const helper = (in_left, in_right) => {
// 如果这里没有节点构造二叉树了,就结束
if (in_left > in_right) {
return null;
}
// 选择 post_idx 位置的元素作为当前子树根节点
const root_val = postorder[post_idx];
const root = new TreeNode(root_val);
// 根据 root 所在位置分成左右两棵子树
const index = idx_map.get(root_val);
// 下标减一
post_idx--;
// 构造右子树
root.right = helper(index + 1, in_right);
// 构造左子树
root.left = helper(in_left, index - 1);
return root;
}
// 从后序遍历的最后一个元素开始
post_idx = postorder.length - 1;
// 建立(元素,下标)键值对的哈希表
let idx = 0;
inorder.forEach((val, idx) => {
idx_map.set(val, idx);
});
return helper(0, inorder.length - 1);
};