Infatti se leggi bene il mio algoritmo, corredato di commenti, c'è scritto:Originariamente inviato da Shores
Tra l'algoritmo proposto da anx721 è inutilmente pesante, poichè procede nell'analisi di TUTTO l'albero anche quando il livello richiesto è stato superato; sarebbe stato più giusto attivare la ricorsione SOLO se il livello attuale era MINORE di quello cercato.
Infatti, i figli di un nodo di livello J non potranno che avere livello J+1; ciò implica che se ho trovato un nodo del livello cercato i suoi figli (e i suoi nipoti e così via) saranno di certo ignorabili poichè aventi livelli di certo superiori.
da cui si vede che quando si raggiunge il livello k desiderato si stampa il nodo e poi c'è return cosicchè le chiamate ricorsive non vengono eseguite sui nodi a livello maggiorecodice:if(curentLevel == level){ printf("%d\n", T -> elem); //Se questo nodo è a livello level non c'è bisogno di //richiamare la procedura sui figli che saranno a //livello magiore return; } printLevel(T -> left, currentLevel + 1, level); printLevel(T -> right, currentLevel + 1, level);:quote:
![]()
La complessita è ovviamente lineare rispetto al numero dei nodi (nel caso peggiore infatti k è pari all'altezza dell'albero quindi bisogna visitare tutti i nodi); come impostare le equazioni di ricorrenza ora non mi ricordo.
![]()
PS x }gu|do[z]{®©: poi vedo

:quote:
Rispondi quotando