|
|
|
![]() |
|
Strumenti |
![]() |
#1 | |
Senior Member
Iscritto dal: Jun 2009
Messaggi: 5518
|
[C] Albero binario e somma nodi livello k
Come faccio a sommare i nodi a livello k se posso solo "portare su" a e liv?
Quote:
|
|
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Feb 2010
Messaggi: 466
|
|
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Che intendi con "portare su"?
![]()
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Jun 2009
Messaggi: 5518
|
intanto grazie,intendo dire passarlo come parametro e nella struttura dell' albero ho
int val e 2 struct per *left e *right |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
facilissimo
![]() pseudocodice, spero si capisca: (R é il nodo radice dell'albero, R.Left é il figlio sinistro, R.Right il destro, k é il livello, i é un parametro intero che indica il livello corrente) Codice:
function f(R, k, i) : if i < k : n <- 0 if R has left child : n <- n + f(R.Left, k, i + 1) if R has right child : n <- n + f(R.Right, k, i + 1) return n else : return 1 Codice:
f(T, k, 0) |
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Quote:
Codice:
algoritmo SommaLivelloK(albero T, intero L) { intero risultato = 0; se (T non è nullo) e (L >= 0) { risultato += chiave(T); risultato += SommaLivelloK(sinistro(T), L - 1); risultato += SommaLivelloK(destro(T), L - 1); } restituisci risultato; } ![]() P.S.: chiaramente, le funzioni chiave(), sinistro() e destro() associano ad ogni nodo dell'albero, rispettivamente, un valore chiave, un figlio sinistro, un figlio destro.
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! Ultima modifica di DanieleC88 : 01-03-2010 alle 12:29. |
|
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Jun 2009
Messaggi: 5518
|
grazie davvero ragazzi,ho risolto,ma ho un nuovo problema,
Quote:
Grazie |
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Jun 2002
Messaggi: 442
|
Chiedo scusa al thread starter se mi intrometto ma ho visto questo thread a proposito di ricorsione ed alberi ennari e volevo chiedere un quesito in questa sede visto che mi sembrate molto competenti in materia
![]() Se la mia funzione torna un array, come posso fare per eseguirla ricorsivamente *per ogni elemento dell'array* (che a sua volta potrà originare un array con più di un elemento)? Attraverso un for posso scorrere tutto l'array e richiamare la funzione con l'oggetto aggiornato ma si ferma ovviamente (?) al primo elemento e non li scorre tutti. Non so se sia rilevante, ma nel mio caso sto usando PHP.
__________________
- |
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Dev'essere necessariamente ricorsiva? Perché IMHO viene più semplice da fare iterativamente.
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:52.