View Single Post
Old 25-03-2008, 22:04   #20
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Cittā: Londra (Torino)
Messaggi: 3692
Boh, io un'idea da valutare ce l'avrei, e se non sbaglio e' O(n), nel senso che si effettuano al massimo tanti passi quanti sono i nodi dell-albero.
Direi quindi che dovrebbe essere equivalente all'ottimo.

Una funzione ricorsiva alla quale si passa il nodo da valutare, e 2 valori, ovvero il range di validita' di quel nodo, chiamiamoli min e max.
Se il valore del nodo (value) non e' compreso nell'intervallo, allora male, ritornosubito false.
A qusto punto si valuta ricorsivamente sul sottoalbero di sinistra e su quello di destra.
Il range di validita' del sottoalbero di sinistra e' min - value
il rande di validita' del sottoalbero di destra e' value - max


Codice:
private bool Verify(Node center, int min, int max)
{
    if ((center.Value < min) || (center.Value > max)) return false;            
    if ((center.left!=null) && (Verify(center.left, min, center.Value) == false)) return false;
    if ((center.right!=null) && (Verify(center.right, center.Value, max) == false)) return false;
    return true;
}
La prima chiamata sara'
return Verify (Radice,0,infinito);
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX č offline   Rispondi citando il messaggio o parte di esso