Construct Binary Tree from Inorder and Postorder Traversal
MediumArrayHash TableDivide and ConquerTreeBinary Tree
Solution
import { TreeNode } from '@algorithm/lib';
export function buildTree(inorder: number[], postorder: number[]): TreeNode | null {
const stack = [...postorder];
const indices = new Map(inorder.map((v, i) => [v, i]));
function buildNode(start: number, end: number): TreeNode | null {
if (start > end || stack.length === 0) {
return null;
}
const value = stack.pop()!;
const mid = indices.get(value)!;
const node = new TreeNode(value);
node.right = buildNode(mid + 1, end);
node.left = buildNode(start, mid - 1);
return node;
}
return buildNode(0, inorder.length - 1);
}