Бинарное дерево имеет 1 или 2 дочерних элемента в неконечных узлах и 0 узлов в конечных узлах. Пусть в дереве будет узлов, и мы должны расположить их таким образом, чтобы они все еще формировали правильное двоичное дерево.n
Не доказывая, я утверждаю, что для максимизации высоты данные узлы должны быть расположены линейно, то есть каждый неконечный узел должен иметь только одного дочернего элемента:
O 1
|
O 2
|
O 3
|
O 4
|
O 5
|
O 6
|
O 7
|
O 8
Здесь формула для вычисления отношения высоты с точки зрения количества узлов проста. Если - высота дерева, то h = n - 1 .hh=n−1
Теперь, если мы попытаемся построить бинарное дерево из узлов с минимальной высотой (всегда сводимой к полному бинарному дереву), мы должны упаковать как можно больше узлов на верхних уровнях, прежде чем перейти к следующему уровню. Итак, дерево принимает вид следующего дерева:n
O
|1
|
O------+-----O
|2 |3
| |
O---+---O O---+----O
|4 |5 6 7
| |
O---+--O O
8 9 10
Начнем с частного случая, .n=2m−1
Мы знаем, что
20+21+22+...+2m−1=2m−1
Также легко доказать, что уровень, на котором могу иметь не более 2 i узлов.i2i
Используя этот результат в приведенной выше сумме, мы находим, что для каждого уровня от 0 до m существует соответствующий член 2 i - 1 в разложении 2 m - 1 . Это означает, что полное двоичное дерево 2 m - 1 узлов полностью заполнено и имеет высоту, h ( 2 m - 1 ) = m - 1 , где h ( n ) = высота полного двоичного дерева с n узлами.я0м2я - 12м- 12м- 1ч ( 2м- 1 ) = м - 1h ( n ) =N
ч ( 2м) = м2м- 1( 2м−1)+1=2mmm−1m
h(2m)=m,
h(2m+1)=m+1
h(2m+1−1)=m
∀n∈Z,2m≤n<2m+1
m≤h(n)<m+1
m≤log2(n)<m+1
m=⌊log2(n)⌋
∀ n , n ∈ [ 2м, 2м + 1)
h ( n ) = m = ⌊ log2( n ) ⌋
∀ п ∈ Z
журнал2( n + 1) - 1Nжурнал2( н )N