Definizione di un albero bilanciato


100

Mi chiedo solo se qualcuno potrebbe essere in grado di chiarire la definizione di un albero equilibrato per me. Ho che "un albero è bilanciato se ogni sottoalbero è bilanciato e l'altezza dei due sottoalberi differisce al massimo di uno.

Mi scuso se questa è una domanda stupida, ma questa definizione si applica a tutti i nodi fino alle foglie di un albero o solo ai sottoalberi sinistro e destro immediatamente fuori dalla radice? Immagino che un altro modo per inquadrarlo sarebbe, è possibile che i nodi interni di un albero siano sbilanciati e l'intero albero rimanga bilanciato?


6
Volevo solo aggiungere che stiamo parlando di Comp. Definizione scientifica di una sottostruttura: una sottostruttura di un albero T è un albero costituito da un nodo in T e da tutti i suoi discendenti in T. Per una definizione matematica regolare (un sottografo di un albero che è esso stesso un albero) non è vero .
TT_

Risposte:


123

Il vincolo viene generalmente applicato in modo ricorsivo a ogni sottostruttura. Cioè, l'albero è bilanciato solo se:

  1. Le altezze dei sottoalberi sinistro e destro differiscono al massimo di uno, AND
  2. La sottostruttura sinistra è bilanciata, AND
  3. La sottostruttura destra è bilanciata

Secondo questo, il prossimo albero è bilanciato:

     A
   /   \
  B     C  
 /     / \  
D     E   F  
     /  
    G  

Il prossimo non è bilanciato perché i sottoalberi di C differiscono di 2 nella loro altezza:

     A
   /   \
  B     C   <-- difference = 2
 /     /
D     E  
     /  
    G  

Detto questo, il vincolo specifico del primo punto dipende dal tipo di albero. Quello sopra elencato è il tipico degli alberi AVL .

Gli alberi rosso-neri , ad esempio, impongono un vincolo più morbido.


50

Esistono diversi modi per definire "Bilanciato". L'obiettivo principale è mantenere la profondità di tutti i nodi O(log(n)).

Mi sembra che la condizione di equilibrio di cui stavi parlando sia per l' albero AVL .
Ecco la definizione formale della condizione di equilibrio dell'albero AVL :

Per ogni nodo in AVL, l'altezza della sua sottostruttura sinistra differisce al massimo di 1 dall'altezza della sua sottostruttura destra.

Prossima domanda, cos'è " altezza "?

L '" altezza " di un nodo in un albero binario è la lunghezza del percorso più lungo da quel nodo a una foglia.

C'è un caso strano ma comune:

Le persone definiscono l'altezza di un albero vuoto (-1).

Ad esempio, il figlio sinistro di root è null:

              A  (Height = 2)
           /     \
(height =-1)       B (Height = 1) <-- Unbalanced because 1-(-1)=2 >1
                    \
                     C (Height = 0)

Altri due esempi per determinare:

Sì, un esempio di albero bilanciato :

        A (h=3)
     /     \
 B(h=1)     C (h=2)        
/          /   \
D (h=0)  E(h=0)  F (h=1)
               /
              G (h=0)

No, non è un esempio di albero bilanciato :

        A (h=3)
     /     \
 B(h=0)     C (h=2)        <-- Unbalanced: 2-0 =2 > 1
           /   \
        E(h=1)  F (h=0)
        /     \
      H (h=0)   G (h=0)      

1
Si noti che questa definizione consente sottoalberi non bilanciati di alberi bilanciati. (es. estendi l'esempio di albero bilanciato sopra aggiungendo un figlio a D e un altro a G) È inteso?
gen

2
No non è così. " Per qualsiasi nodo in AVL , l'altezza della sua sottostruttura sinistra differisce al massimo di 1 dall'altezza della sua sottostruttura destra." Se aggiungi un bambino a D, B non seguirà la regola di cui sopra. Quindi, l'albero non sarà un BBT.
John Red

1
la tua risposta è molto prolissa e non accurata
Marwen Trabelsi

9

Non c'è differenza tra queste due cose. Pensaci.

Prendiamo una definizione più semplice: "Un numero positivo è pari se è zero o quel numero meno due è pari". Questo dice che 8 è anche se 6 è pari? O questo dice che 8 è pari se 6, 4, 2 e 0 sono pari?

Non c'è alcuna differenza. Se dice che 8 è anche se 6 è pari, dice anche che 6 è anche se 4 è pari. E quindi dice anche che 4 è anche se 2 è pari. E quindi dice che 2 è pari se 0 è pari. Quindi, se dice che 8 è pari se 6 è pari, (indirettamente) dice che 8 è pari se 6, 4, 2 e 0 sono pari.

È la stessa cosa qui. Qualsiasi sottoalbero indiretto può essere trovato da una catena di sottoalberi diretti. Quindi, anche se si applica direttamente solo agli alberi secondari diretti, si applica comunque indirettamente a tutti gli alberi secondari (e quindi a tutti i nodi).


1
Diciamo che il valore della radice è 15. In basso a destra, ho 16,17,18. In basso a sinistra ho 14,13,12. È un albero equilibrato? L'altezza di ogni sottoalbero fuori dal nodo è all'interno di uno. Ma prendi il primo nodo sotto la radice a destra, non ha figli a sinistra ma l'altezza dei suoi figli a destra è 2. Quindi quel nodo non è bilanciato. È corretto?
Mark Soric

1
Corretta. Quindi l'albero non è equilibrato.
David Schwartz

1
Quindi, affinché un albero sia bilanciato, ogni nodo deve essere bilanciato. Bellezza - Grazie mille per il tuo aiuto.
Mark Soric

1
@DavidSchwartz perché stiamo cercando di utilizzare un albero bilanciato? perché ci interessa se un albero è equilibrato o no?
Dejell

3
Questa è di gran lunga la risposta più complessa che ho visto su SO - a qualsiasi domanda. Mi dispiace dirlo.
Trevor

4

L'albero bilanciato è un albero la cui altezza è dell'ordine di log (numero di elementi nell'albero).

height = O(log(n))
O, as in asymptotic notation i.e. height should have same or lower asymptotic
growth rate than log(n)
n: number of elements in the tree

La definizione data "un albero è bilanciato di ogni sottoalbero è equilibrato e l'altezza dei due sottoalberi differisce al massimo di uno" è seguita dagli alberi AVL.

Poiché gli alberi AVL sono bilanciati ma non tutti gli alberi bilanciati sono alberi AVL, gli alberi bilanciati non mantengono questa definizione ei nodi interni possono essere sbilanciati in essi. Tuttavia, gli alberi AVL richiedono che tutti i nodi interni siano bilanciati.


3

lo scopo dell'albero equilibrato è quello di raggiungere la foglia in un minimo di traversata (altezza minima). Il grado dell'albero è il numero di rami meno 1. Un albero bilanciato può non essere binario.


0
  1. L'altezza di un nodo in un albero è la lunghezza del percorso più lungo da quel nodo verso il basso a una foglia, contando sia il vertice iniziale che quello finale del percorso.
  2. Un nodo in un albero è bilanciato in altezza se le altezze dei suoi sottoalberi differiscono di non più di 1.
  3. Un albero è bilanciato in altezza se tutti i suoi nodi sono bilanciati in altezza.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.