Overview
Given two integer arrays preorder and inorder representing the preorder and inorder traversals of a binary tree, construct and return the binary tree.
The preorder traversal visits: root → left subtree → right subtree. The inorder traversal visits: left subtree → root → right subtree.
Constraints
preorder.length === inorder.length(1 to 3,000 nodes).- All values in
preorderandinorderare unique. - Each value in
preorderalso appears ininorder. - Return a tree node object:
{ val, left, right }.
Examples
buildTree([3, 9, 20, 15, 7], [9, 3, 15, 20, 7]); // => // 3 // / \ // 9 20 // / \ // 15 7
buildTree([1], [1]);
// => { val: 1, left: null, right: null }Solution
Reveal solution
function buildTree(preorder, inorder) {
if (!preorder.length) return null;
const rootVal = preorder[0];
const mid = inorder.indexOf(rootVal);
return {
val: rootVal,
left: buildTree(preorder.slice(1, mid + 1), inorder.slice(0, mid)),
right: buildTree(preorder.slice(mid + 1), inorder.slice(mid + 1)),
};
}Resources
binary-tree-from-traversals.js
Binary Tree Rebuilding from Preorder and Inorder Traversals
mediumcodingAlgorithmsTrees
Overview
Given two integer arrays preorder and inorder representing the preorder and inorder traversals of a binary tree, construct and return the binary tree.
The preorder traversal visits: root → left subtree → right subtree. The inorder traversal visits: left subtree → root → right subtree.
Constraints
preorder.length === inorder.length(1 to 3,000 nodes).- All values in
preorderandinorderare unique. - Each value in
preorderalso appears ininorder. - Return a tree node object:
{ val, left, right }.
Examples
buildTree([3, 9, 20, 15, 7], [9, 3, 15, 20, 7]); // => // 3 // / \ // 9 20 // / \ // 15 7
buildTree([1], [1]);
// => { val: 1, left: null, right: null }Solution
Reveal solution
function buildTree(preorder, inorder) {
if (!preorder.length) return null;
const rootVal = preorder[0];
const mid = inorder.indexOf(rootVal);
return {
val: rootVal,
left: buildTree(preorder.slice(1, mid + 1), inorder.slice(0, mid)),
right: buildTree(preorder.slice(mid + 1), inorder.slice(mid + 1)),
};
}Resources
NameTopicDifficulty
103 of 103 problems