class TreeNode { constructor(val, left, right) { this.val = (val === undefined ? 0 : val); this.left = (left === undefined ? null : left); this.right = (right === undefined ? null : right); } } /** * @param {number[]} preorder * @param {number[]} inorder * @return {TreeNode} */ var buildTree = function (preorder, inorder) { let tree = new TreeNode() const buildNode = (node, order) => { if (0 === order.length) return; let curr = preorder.shift(); if (!order.includes(curr)) return; let tmpInorder1 = [...order], tmpInorder2 = [...order], inIdx = order.indexOf(curr), leftInorder = tmpInorder1.splice(0, inIdx), rightInorder = tmpInorder2.splice(inIdx + 1, tmpInorder2.length - 1); node.val = curr; if (leftInorder.length > 0) { node.left = new TreeNode(); buildNode(node.left, leftInorder); } if (rightInorder.length > 0) { node.right = new TreeNode(); buildNode(node.right, rightInorder); } } buildNode(tree, [...inorder]); return tree; };