Why two traversals needed

Preorder alone is ambiguous. Inorder gives left/right structure. Together they fix the tree.

Advertisement

Preorder + Inorder

int preIdx = 0;
Node build(int[] preorder, int[] inorder, int l, int r, Map inMap) {
  if (l > r) return null;
  int val = preorder[preIdx++];
  Node node = new Node(val);
  int idx = inMap.get(val);
  node.left = build(preorder, inorder, l, idx - 1, inMap);
  node.right = build(preorder, inorder, idx + 1, r, inMap);
  return node;
}
Advertisement

Postorder + Inorder

Process postorder in reverse. Root at end. Recursion mirror-image of preorder.

Preorder + Postorder

Ambiguous for general binary trees. Works if it's full binary tree (every internal node has 2 children).