Я думаю, что вы пытаетесь найти доказательство для: N = 2L - 1
, где L
- это число
листовых узлов, а N
- общее количество узлов в двоичном дереве.
Чтобы эта формула сохранялась, вам нужно наложить несколько ограничений на то, как
дерево построено. Каждый узел является либо листом, что означает, что он не имеет дочерних элементов, либо
это внутренний узел. Внутренние узлы имеют 3
Возможные конфигурации:
- 2 дочерних узла
- 1 дочерний и 1 внутренний узел
- 2 внутренних узла
Все три конфигурации подразумевают, что внутренний узел соединяется с двумя другими узлами. Это явно
исключает ситуацию, когда узел подключается к одному дочернему элементу, как в:
o
/
o
Неофициальное доказательство
Начните с минимального дерева из 1 листа: L = 1, N = 1 подставьте в N = 2L - 1 и увидите, что
формула верна (1 = 1, пока все хорошо).
Теперь добавьте еще один минимальный кусок к дереву. Для этого вам нужно добавить еще два узла и
дерево выглядит так:
o
/ \
o o
Обратите внимание, что вы должны добавить узлы в парах, чтобы удовлетворить ограничения, установленные ранее.
Добавление пары узлов всегда добавляет
один лист (два новых листовых узла, но вы теряете один, так как он становится внутренним узлом). Узел роста
прогрессирует как ряд: 1, 3, 5, 7, 9 ... но рост листьев составляет: 1, 2, 3, 4, 5 ... Именно поэтому формула
N = 2L - 1
верно для этого типа дерева.
Вы можете использовать математическую индукцию, чтобы построить формальное доказательство, но эта работа для меня найдется.