题目:
给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。
思路:
与上一题很像,只不过把前序遍历数组换成了后序遍历
直接上代码
var buildTree = function (inorder, postorder) {
let map = {};
for (let i = 0; i < inorder.length; i++) {
map[inorder[i]] = i;
}
return build(inorder, 0, inorder.length - 1, postorder, 0, postorder.length - 1);
function build(inorder, inStart, inEnd ,postorder, postStart, postEnd) {
//base case
if (inStart > inEnd) return null;
//后续数组的最后一个元素是当前根节点
let rootVal = postorder[postEnd];
//获取根节点在中序遍历数组中的索引
let index = map[rootVal];
//左子树的长度
let leftSize = index - inStart;
// let rightSize = inEnd - index;
//构建根节点
let root = new TreeNode(rootVal);
//递归构建左右子树
root.left = build(inorder, inStart, index - 1, postorder, postStart, postStart + leftSize - 1);
root.right = build(inorder, index + 1, inEnd, postorder,
postStart + leftSize, postEnd - 1)
return root;
}
};