Construct Binary Tree from Preorder and Inorder Traversal
MediumArrayHash TableDivide and ConquerTreeBinary Tree
Solution
import { TreeNode } from '@algorithm/lib';
export function buildTree(preorder: number[], inorder: number[]): TreeNode | null {
function findIndex(arr: number[], value: number, startIndex: number, endIndex: number) {
for (let i = startIndex; i < endIndex; i++) {
if (arr[i] === value) {
return i;
}
}
return -1;
}
const stack = [...preorder].reverse();
function buildNode(startIndex: number, endIndex: number): TreeNode | null {
if (startIndex >= endIndex || stack.length === 0) {
return null;
}
const rootValue = stack.pop()!;
const rootIndex = findIndex(inorder, rootValue, startIndex, endIndex);
return new TreeNode(
rootValue,
buildNode(startIndex, rootIndex),
buildNode(rootIndex + 1, endIndex),
);
}
return buildNode(0, inorder.length);
}