Constructing a tree from two traversals
=======================================

inorder   : [4, 2, 5, 1, 6, 3]
preorder  : [1, 2, 4, 5, 3, 6]

from inorder + preorder, one line per recursive call:
root 1  inorder slice [0..5]  left size 3, right size 2
  root 2  inorder slice [0..2]  left size 1, right size 1
    root 4  inorder slice [0..0]  left size 0, right size 0
    root 5  inorder slice [2..2]  left size 0, right size 0
  root 3  inorder slice [4..5]  left size 1, right size 0
    root 6  inorder slice [4..4]  left size 0, right size 0
result    : 1(2(4,5),3(6,-))
postorder of the result: [4, 5, 2, 6, 3, 1]

from inorder + postorder the same tree comes back: 1(2(4,5),3(6,-))

two different trees with the same preorder AND postorder:
  1(2,-)  preorder [1, 2]  postorder [2, 1]
  1(-,2)  preorder [1, 2]  postorder [2, 1]
