Comprensione albero...

Giova411
Mi pare di capire che restituisce la larghezza massima di un albero, ossia il massimo numero di nodi per livello.
Però non capisco molte parti, non so proprio come simularlo "carta e penna"... Chiedo aiuto.
integer Larghezza(TREE t)

integer larghezza <-- 1 
integer level <-- 1   // 1)  PARTE SUPPONENDO UN LIVELLO 1?
integer count <-- 1 
QUEUE Q <-- Queue() // capito che usa la coda per una visita in ampiezza 
Q.enqueue(t)  // 2) COSA METTE DENTRO? SOLO LA RADICE O TUTTO L'ALBERO?
t.level <-- 0 // capito che è il livello zero della radice
while not Q.isEmpty() do
   TREE u <-- Q.dequeue()  
   if u.level != level then   // 3) queste 2righe, con level, proprio non le capisco
       level <-- u.level  // (ma immagino che questo if cerchi di capire se è cambiato il livello)
       count <-- 0               // capisco che count si setta a zero col livello nuovo
   count <-- count + 1
   if count > larghezza then larghezza <-- count
   TREE v <-- u.leftmostChild()  // 4) perché crea un altro sottoalbero nuovo? 
   while v != nil do // 5) tutto il while, interno al primo, non lo capisco proprio
       v.level <-- u.level + 1
       Q.enqueue(v)
       v <-- v.rightSibling()

return larghezza

Risposte
Giova411
5) Forse il while qualcosa mi dice effettivamente... (Pago di insicurezza)
Il while interno cicla per i vari livelli poiché v.rightSibling() dovrebbe restituire nil quando non trova fratelli del nodo.
Il while "grande" diciamo che "passa una volta" per ogni nodo dell'albero dato.

Giova411
Capito benissimo poi.
Se qualcuno ha dubbi non esiti a chiedere!
A breve miglioramenti =)

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.