Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How many permutations of a given array result in BST's of height 2?

A BST is generated (by successive insertion of nodes) from each permutation of keys from the set {1,2,3,4,5,6,7}. How many permutations determine trees of height two?

I been stuck on this simple question for quite some time. Any hints anyone.

By the way the answer is 80.

like image 682
user2473033 Avatar asked Jun 14 '13 23:06

user2473033


3 Answers

Consider how the tree would be height 2?

-It needs to have 4 as root, 2 as the left child, 6 right child, etc.

How come 4 is the root?

-It needs to be the first inserted. So we have one number now, 6 still can move around in the permutation.

And?

-After the first insert there are still 6 places left, 3 for the left and 3 for the right subtrees. That's 6 choose 3 = 20 choices.

Now what?

-For the left and right subtrees, their roots need to be inserted first, then the children's order does not affect the tree - 2, 1, 3 and 2, 3, 1 gives the same tree. That's 2 for each subtree, and 2 * 2 = 4 for the left and right subtrees.

So?

In conclusion: C(6, 3) * 2 * 2 = 20 * 2 * 2 = 80.

like image 182
zw324 Avatar answered Nov 11 '22 22:11

zw324


Note that there is only one possible shape for this tree - it has to be perfectly balanced. It therefore has to be this tree:

         4
       /   \
      2     6
     / \   / \
    1   3 5   7

This requires 4 to be inserted first. After that, the insertions need to build up the subtrees holding 1, 2, 3 and 5, 6, 7 in the proper order. This means that we will need to insert 2 before 1 and 3 and need to insert 6 before 5 and 7. It doesn't matter what relative order we insert 1 and 3 in, as long as they're after the 2, and similarly it doesn't matter what relative order we put 5 and 7 in as long as they're after 6. You can therefore think of what we need to insert as 2 X X and 6 Y Y, where the X's are the children of 2 and the Y's are the children of 6. We can then find all possible ways to get back the above tree by finding all interleaves of the sequences 2 X X and 6 Y Y, then multiplying by four (the number of ways of assigning X and Y the values 1, 3, 5, and 7).

So how many ways are there to interleave? Well, you can think of this as the number of ways to permute the sequence L L L R R R, since each permutation of L L L R R R tells us how to choose from either the Left sequence or the Right sequence. There are 6! / 3! 3! = 20 ways to do this. Since each of those twenty interleaves gives four possible insertion sequences, there end up being a total of 20 × 4 = 80 possible ways to do this.

Hope this helps!

like image 32
templatetypedef Avatar answered Nov 11 '22 20:11

templatetypedef


I've created a table for the number of permutations possible with 1 - 12 elements, with heights up to 12, and included the per-root break down for anybody trying to check that their manual process (described in other answers) is matching with the actual values.

http://www.asmatteringofit.com/blog/2014/6/14/permutations-of-a-binary-search-tree-of-height-x

like image 29
Joshua Miller Avatar answered Nov 11 '22 20:11

Joshua Miller