Comprensione albero...
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.
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
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.
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.
Capito benissimo poi.
Se qualcuno ha dubbi non esiti a chiedere!
A breve miglioramenti =)
Se qualcuno ha dubbi non esiti a chiedere!
A breve miglioramenti =)