Anche se Java non fornisce una classe albero binario nelle librerie predefinite , una classe di base albero binario è abbastanza semplice da presentare . A " attraversamento " di una struttura di dati è un algoritmo che visita ogni nodo volta . Questo è spesso implementato come una sorta di iteratore ( molto simile a un elenco iteratore ) o il metodo che chiamerà un metodo di callback per ogni nodo . In Java , per fare un " postorder " traversal che visiterà il nodo radice ultima , non sono necessari richiami o iteratori . La funzione di attraversamento sarà sufficiente stampare ogni nodo che visita alla console . Istruzioni
1
Scrivi una ricerca di classe di base albero binario . Ci sono solo due metodi che devono essere sostenuti in questa fase : un costruttore di base che inizializza il valore del nodo , e un metodo di inserimento . Il metodo insert attraversamento di un albero e creare un nuovo nodo nella posizione corretta . " " public class BinaryTree { BinaryTree sinistra ; BinaryTree destra ; valore int ; pubblico BinaryTree ( int v) {valore = v; } //Inserire un valore nell'albero public void insert ( int v) {if (v if ( sinistra = = null) a sinistra = new BinaryTree ( v) ; altro left.insert (v );} else if (v > value) {if ( a destra == null) a destra = new BinaryTree ( v) ; altro right.insert (v ) , . } } " "
2
Creare un'istanza del albero binario che sarà il nodo radice ogni nodo , anche il nodo principale , deve avere un valore
< br . > 3
scegliere un valore per il nodo radice che è da qualche parte nel mezzo degli oggetti sarete riporlo. Ad esempio, se stai memorizzare una distribuzione uniforme di numeri da 1 a 100 , 50 è una buona scelta per il nodo principale alberi binari dovrebbero essere il più equilibrato possibile , dal momento che gli alberi sbilanciati crescono estremamente alta e non sono molto efficaci " " BinaryTree b = new BinaryTree (50); " . ».
4
Insert alcuni nodi nell'albero. Dato che questo albero non è auto - bilanciamento , per mantenere l'equilibrio, i nodi devono essere inseriti in un ordine specifico . l'ordine in questo codice di esempio è realizzato per rendere l'albero più breve e più efficiente possibile . " " b . inserto ( 20 ) ; b.insert ( 40 ) ; b.insert ( 10) ; b.insert ( 5) ; b.insert ( 45 ) ; b.insert ( 70); b.insert ( 60 ) ; b.insert ( 80 ) ; b.insert ( 55 ) ; b.insert ( 85); " "
5
attraversare l'albero , attraversare l'albero a sinistra per primo, seguito da l'albero giusto , e poi finalmente la nodo radice . Se ricorsione viene utilizzata per fare il postordine , il metodo è lunga solo tre linee . In questo caso , lo stack crescerà soltanto fino all'altezza dell'albero . Poiché l'albero è bilanciato e piccoli , ricorsione non overflow lo stack .
6
Aggiungi nuovo metodo alla classe BinaryTree chiamato postorder . Ecco , stampa solo il valore di ogni nodo che visita. " " vuoto postorder pubblico ( ) {if ( a sinistra ! = null ) left.postorder ( ), se ( a destra = null) right.postorder (); ! System.out.println ( value); } " "
7
Stampa i nodi postorder chiamando il metodo b.postorder dopo i vostri inserti " " b.postorder (); " .