A binary tree of N nodes is ‘curious’ if it is a binary tree whose node values are 1, 2, ..,N and which satisfy the property that
- Each internal node of the tree has exactly one descendant which is greater than it.
- Every number in 1,2, …, N appears in the tree exactly once.
Example of a curious binary tree
4
/ \
5 2
/ \
1 3
Can you give an algorithm to generate a uniformly random curious binary tree of n nodes, which runs in O(n) guaranteed time?
Assume you only have access to a random number generator which can give you a (uniformly distributed) random number in the range [1, k] for any 1 <= k <= n. Assume the generator runs in O(1).
I would like to see an O(nlogn) time solution too.
Please follow the usual definition of labelled binary trees being distinct, to consider distinct curious binary trees.
Aha, I think I’ve got how to create a random heap in O(N) time. (after which, use approach in Greg Kuperberg’s answer to transform into “curious” binary tree.)
edit 2: Rough pseudocode for making a random min-heap directly. Max-heap is identical except the values inserted into the heap are in reverse numerical order.