1 題目
根據一棵樹的中序遍歷與後序遍歷構造二叉樹。
注意:
你可以假設樹中沒有重複的元素。
例如,給出
中序遍歷 inorder = [9,3,15,20,7]
後序遍歷 postorder = [9,15,7,20,3]
返回如下的二叉樹:
3
/
9 20
/
15 7
2 思路
這道題的主要思路跟從中序和前序序列構造二叉樹,只不過前序換成了後序,我們就需要先構造右子樹,再構造左子樹
3代碼
/**
* 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) {
function d(pArr, inArr, begin, end) {
if (begin > end) return null;
let nodeValuie = pArr.pop();
let index = inArr.indexOf(nodeValuie);
let node = new TreeNode(nodeValuie);
node.right = d(pArr, inArr, index + 1, end);
node.left = d(pArr, inArr, begin, index - 1);
return node;
}
return d(postorder, inorder, 0, inorder.length - 1);
function TreeNode(val) {
this.val = val;
this.left = this.right = null;
}
};