题目描述:
根据一棵树的中序遍历与后序遍历构造二叉树。
注意:
你可以假设树中没有重复的元素。
例如,给出
中序遍历 inorder = [9,3,15,20,7]
后序遍历 postorder = [9,15,7,20,3]
返回如下的二叉树:
3
/ \
9 20
/ \
15 7
题解:
1.解题思路:利用递归算法,由后序遍历规则,可知后序遍历最后一位为生成树的根节点,在序号和前序遍历的map映射中找到根节点的下标,由前序遍历规则,该下标左侧为左子树,右侧为右子树
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {number[]} inorder
* @param {number[]} postorder
* @return {TreeNode}
*/
var buildTree = function(inorder, postorder) {
let postorder_index;
postorder_index = postorder.length - 1;
const indexMap = new Map()
inorder.forEach((v, k) => {
indexMap.set(v, k)
})
function helper(start, end) {
if (start > end) {
return null;
}
const root_val = postorder[postorder_index]
const root = new TreeNode(root_val);
const root_index = indexMap.get(root_val);
postorder_index--;
root.right = helper(root_index + 1, end);
root.left = helper(start, root_index - 1);
return root;
}
return helper(0, inorder.length - 1);
};