Qual è la differenza tra la profondità e l'altezza dell'albero?


262

Questa è una semplice domanda dalla teoria degli algoritmi.
La differenza tra loro è che in un caso si conta il numero di nodi e in un altro numero di spigoli sul percorso più breve tra nodo radice e nodo concreto.
Quale è quale?


78
Suggerimento: per evitare confusione tra le terminologie: 1. Altezza: immagina di misurare l'altezza di una persona, lo facciamo dalla punta ai piedi (dalla foglia alla radice). 2. Profondità: immagina di misurare la profondità di un mare, lo facciamo dalla superficie terrestre al fondo dell'oceano (dalla radice alla foglia).
Yesh,

@Yesh Questa è una grande analogia.
Carattere speciale

1
Da aggiungere all'eccellente analogia di @Yesh: per un nodo interno nel mezzo dell'albero, la profondità è quanti livelli si trova sotto il nodo radice, e l'altezza è come livelli è sopra il suo nodo figlio più in basso.
Thomas Nguyen,

Risposte:


664

Ho imparato che la profondità e l'altezza sono proprietà di un nodo :

  • La profondità di un nodo è il numero di spigoli dal nodo al nodo radice dell'albero.
    Un nodo radice avrà una profondità di 0.

  • L' altezza di un nodo è il numero di spigoli sul percorso più lungo dal nodo a una foglia.
    Un nodo foglia avrà un'altezza di 0.

Proprietà di un albero :

  • L' altezza di un albero sarebbe l'altezza del suo nodo radice,
    o equivalentemente, la profondità del suo nodo più profondo.

  • Il diametro (o larghezza ) di un albero è il numero di nodi sul percorso più lungo tra due nodi foglia qualsiasi. L'albero in basso ha un diametro di 6 nodi.

Un albero, con altezza e profondità di ciascun nodo


21
+1 stava per aggiungere un preventivo con lo stesso contenuto da qui: en.wikipedia.org/wiki/Tree_%28data_structure%29
Péter Török

2
significa che altezza == profondità massima
roottraveller

6
@rkm_Hodor: Sì, l' altezza di un albero è sempre uguale alla profondità del nodo più profondo.
Daniel AA Pelsmaeker,

1
Potresti per favore citare una fonte per la tua affermazione che il diametro di un albero conta nodi anziché bordi? Ciò è in conflitto con la normale definizione del diametro di un grafico (vedi ad esempio en.wikipedia.org/wiki/Distance_(graph_theory) ) che richiede il percorso più lungo.
j_random_hacker,

1
@j_random_hacker È una questione di definizione, scegli quella più utile per te. Per passare dal numero di vertici al numero di spigoli, basta sottrarre 1. Preferisco contare il numero di vertici, in quanto ciò risulta in un grafico con un solo nodo con larghezza 1 e un grafico vuoto con larghezza 0. mathworld. wolfram.com/GraphDiameter.html
Daniel AA Pelsmaeker,

44

l'altezza e la profondità di un albero sono uguali ...

ma l'altezza e la profondità di un nodo non sono uguali perché ...

l'altezza viene calcolata attraversando dal nodo dato alla foglia più profonda possibile.

la profondità viene calcolata dall'attraversamento dalla radice al nodo dato .....


4
"l'altezza viene calcolata attraversando la foglia verso il nodo dato" non è corretta, la foglia deve essere quella più profonda tra tutte le foglie del nodo dato.
mightyWOZ

14

Secondo Cormen et al. Introduzione agli algoritmi (Appendice B.5.3), la profondità di un nodo X in un albero T è definita come la lunghezza del percorso semplice (numero di spigoli) dal nodo radice da T a X. L'altezza di un nodo Y è il numero di spigoli sul percorso semplice verso il basso più lungo da Y a una foglia. L'altezza di un albero è definita come l'altezza del suo nodo radice.

Si noti che un percorso semplice è un percorso senza vertici ripetuti.

L'altezza di un albero è uguale alla profondità massima di un albero . La profondità di un nodo e l'altezza di un nodo non sono necessariamente uguali. Vedere la Figura B.6 della 3a edizione di Cormen et al. per un'illustrazione di questi concetti.

A volte ho riscontrato problemi nel chiedere a uno di contare nodi (vertici) anziché bordi, quindi chiedi chiarimenti se non sei sicuro di dover contare nodi o bordi durante un esame o un colloquio di lavoro.


C'è qualche differenza nel conteggio dei nodi e dei bordi. Sembra che entrambi daranno lo stesso risultato. Correggimi se sbaglio.
VINOTH ENERGETIC

@jdhao come può la profondità della radice essere 2? È 0 (se si considerano i bordi) o 1 (se si considerano i nodi).
neowulf33,

@ neowulf33, sì, mi sbaglio terribilmente. La profondità del nodo radice dovrebbe essere 0. Eliminerò il mio commento per non confondere le persone.
jdhao,

2

Risposta semplice:
Profondità:
1. Albero : il numero di spigoli / arco dal nodo radice al nodo foglia dell'albero viene chiamato Profondità dell'albero.
2. Nodo : il numero di spigoli / arco dal nodo radice a quel nodo viene chiamato Profondità di quel nodo.


2

Un altro modo per comprendere questi concetti è il seguente: Profondità: traccia una linea orizzontale nella posizione della radice e tratta questa linea come terra. Quindi la profondità della radice è 0 e tutti i suoi figli crescono verso il basso, quindi ogni livello di nodi ha la profondità corrente + 1.

Altezza: stessa linea orizzontale ma questa volta la posizione del suolo è nodi esterni, che è la foglia dell'albero e conta verso l'alto.


2

Volevo pubblicare questo post perché sono uno studente universitario CS e sempre più usiamo OpenDSA e altri libri di testo open source. Sembra dalla risposta più votata che il modo in cui viene insegnata l'altezza e la profondità è cambiato da una generazione all'altra, e lo sto postando in modo che tutti siano consapevoli che questa discrepanza ora esiste e speriamo che non causi bug in alcun programmi! Grazie.

Dal libro OpenDSA Data Structures & Algos :

Se n 1 , n 2 , ..., n k è una sequenza di nodi nella struttura tale che n i è il genitore di n i +1 per 1 <= i <k, allora questa sequenza è chiamata un percorso da n Da 1 a nk . La lunghezza del percorso è k − 1. Se esiste un percorso dal nodo R al nodo M, allora R è un antenato di M e M è un discendente di R. Pertanto, tutti i nodi dell'albero sono discendenti della radice dell'albero, mentre la radice è l'antenato di tutti i nodi. La profondità di un nodo M nell'albero è la lunghezza del percorso dalla radice dell'albero a M. L'altezza di un albero è uno in più rispetto alla profondità del nodo più profondo dell'albero.Tutti i nodi di profondità d sono al livello d nell'albero. La radice è l'unico nodo al livello 0 e la sua profondità è 0.

Figura 7.2.1

Figura 7.2.1: Un albero binario. Il nodo A è la radice. I nodi B e C sono i figli di A. I nodi B e D formano insieme una sottostruttura. Il nodo B ha due figli: il figlio sinistro è l'albero vuoto e il figlio destro è D. I nodi A, C ed E sono antenati di G. I nodi D, E ed F costituiscono il livello 2 dell'albero; il nodo A è al livello 0. I bordi da A a C a E a G formano un percorso di lunghezza 3. I nodi D, G, H e I sono foglie. I nodi A, B, C, E e F sono nodi interni. La profondità di I è 3. L'altezza di questo albero è 4.


Per quello che vale, la definizione a questo link è stata cambiata in: "La profondità di un nodo M nell'albero è la lunghezza del percorso dalla radice dell'albero a M. L'altezza di un albero è la profondità del nodo più profondo nella struttura. "
kaya3
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.