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]