Un albero binario ha 1 o 2 figli in nodi non foglia e 0 nodi in nodi foglia. Lascia che ci siano nodi in un albero e dobbiamo sistemarli in modo tale da formare ancora un albero binario valido.n
Senza provare, sto affermando che per massimizzare l'altezza, dati nodi dovrebbero essere disposti in modo lineare, cioè ogni nodo non foglia dovrebbe avere un solo figlio:
O 1
|
O 2
|
O 3
|
O 4
|
O 5
|
O 6
|
O 7
|
O 8
Qui, la formula per calcolare la relazione dell'altezza in termini di numero di nodi è semplice. Se è l'altezza dell'albero, allora h = n - 1 .hh=n−1
Ora, se proviamo a costruire un albero binario di nodi con altezza minima (sempre riducibile a un albero binario completo), dobbiamo impacchettare quanti più nodi possibili nei livelli superiori, prima di passare al livello successivo. Quindi, l'albero assume la forma del seguente albero:n
O
|1
|
O------+-----O
|2 |3
| |
O---+---O O---+----O
|4 |5 6 7
| |
O---+--O O
8 9 10
Cominciamo con un caso particolare, .n=2m−1
Sappiamo che,
20+21+22+...+2m−1=2m−1
Inoltre, è facile dimostrare che, un livello può avere al massimo 2 i nodi in esso.i2i
Usando questo risultato nella somma sopra, troviamo che per ogni livello , da 0 a m , esiste un termine corrispondente 2 i - 1 nell'espansione di 2 m - 1 . Ciò implica che un albero binario completo 2 m - 1 nodi è completamente riempito e ha altezza, h ( 2 m - 1 ) = m - 1 , dove h ( n ) = altezza di un albero binario completo con n nodi.i0m2i−12m- 12m- 1h ( 2m- 1 ) = m - 1h ( n ) =n
Utilizzando questo risultato, , poiché l'albero con 2 m - 1 nodi è completamente riempito e quindi un albero con ( 2 m - 1 ) + 1 = 2 m nodi deve accogliere il nodo aggiuntivo al livello successivo m , aumentando l'altezza di 1 da m - 1 a m .h ( 2m) = m2m- 1( 2m- 1 ) + 1 = 2mmm - 1m
Fino ad ora abbiamo dimostrato, h ( 2 m + 1 ) = m + 1
e h ( 2 m + 1 - 1 ) = m
h ( 2m) = m ,
h ( 2m + 1) = m + 1
h ( 2m + 1- 1 ) = m
Pertanto, m ≤ h ( n ) < m + 1∀ n ∈ Z , 2m≤ n < 2m + 1
m ≤ h ( n ) < m + 1
Ma, prendendo il registro (base 2) su entrambi i lati,
m = ⌊ registro 2 ( n ) ⌋
m ≤ log2( n ) < m + 1
m = ⌊ log2( n ) ⌋
Pertanto, h ( n ) = m = ⌊ log 2 ( n ) ⌋∀ n , n ∈ [ 2m, 2m + 1)
h ( n ) = m = ⌊ log2( n ) ⌋
E possiamo generalizzare questo risultato usando l'induzione.∀ n ∈ Z
log2( n + 1 ) - 1nlog2( n )n