Бинарное дерево из N узлов является «любопытным», если оно является бинарным деревом, значения узлов которого равны 1, 2, .., N и удовлетворяют свойству, которое
- Каждый внутренний узел дерева имеет ровно одного потомка, который больше его.
- Каждое число в 1,2, ..., N появляется в дереве ровно один раз.
Пример любопытного бинарного дерева
4
/ \
5 2
/ \
1 3
Можете ли вы дать алгоритм для генерации равномерно случайного любопытного двоичного дерева из n узлов, которое выполняется за O (n) гарантированное время?
Предположим, у вас есть доступ только к генератору случайных чисел, который может дать вам (равномерно распределенное) случайное число в диапазоне [1, k] для любого 1 <= k <= n. Предположим, что генератор работает в O (1). </p>
Решение о времени O (nlogn) также получит мое одобрение.
Пожалуйста, следуйте обычному определению помеченных бинарных деревьев как отличных, чтобы рассмотреть различные любопытные бинарные деревья.