February 24
Un albero binario di ricerca è una struttura dati in cui i record di dati, chiamati \ "nodi, \" avere puntatori ad altri nodi, chiamati \ "i bambini. \" Questo dà i nodi, quando graficamente fuori, una forma simile a un albero genealogico. I nodi ricevono il loro posto nella struttura basata su se sarebbero valutare come superiore o inferiore a altri nodi. bambini lasciati sono sempre meno di loro genitore; i bambini a destra sempre di più.
Binari alberi di ricerca sono importanti in informatica, perché possono essere entrambi ordinati e cercato, in media, a O (n log n).
1 Creare una funzione negozio che riceve il nodo principale. Ogni volta che avete a che fare con gli alberi in informatica, l'algoritmo più efficace sarà quasi sempre essere ricorsiva e memorizzare l'albero in un file non farà eccezione. Ecco uno scheletro campione della funzione di memorizzazione ricorsiva (in Java).
public void negozio (nodo n) throws IOException {
...
}
2 Scrivere dati su nodo principale su file. Questo userà \ "attraversamento \ pre-order" (Root, Child Left, Bambino destra) per passare attraverso tutti i nodi dell'albero, perché questo metodo di attraversamento renderà più semplice per ricostruire l'albero dall'ordine dei nodi in il file. La funzione ricorsiva appare come segue:
public void negozio (nodo n) throws IOException {
scrittura (savefile, n);
}
Negozio dovrebbe chiamarsi con il Bambino di sinistra:
public void negozio (nodo n) throws IOException {
scrittura (savefile, n);
negozio (n.left);
}
Conservare dovrebbe chiamare se stesso con il figlio destro:
public void negozio (nodo n) throws IOException {
scrittura (savefile, n);
negozio (n.left);
negozio (n.right)
ANDARE
}
3 Doppio controllare che la funzione passa la lista di controllo ricorsivo. Per evitare errori di overflow dello stack, controllare sempre che una funzione ricorsiva soddisfa le seguenti condizioni:
Ha la funzione di avere uno stato di uscita? Sì, finché l'albero non è di profondità infinita, alla fine si raggiungerà un nodo che non ha né un figlio sinistro o destro e uscirà.
Può la ogni iterazione della funzione avvicinarsi allo stato di uscita? Sì, presumendo che l'albero non è circolare e nessun nodo ha una delle sue antenati come un bambino.
La funzione passa la lista di controllo.
4 Ricostruire dal file. Quando arriva il momento di caricare l'albero di nuovo dal file, sarà sufficiente inserire ogni nodo nell'albero come viene caricato dal file utilizzando l'algoritmo di inserimento standard. Questo dovrebbe iniziare alla radice e lavorare la sua strada verso il basso con il pre-ordine di attraversamento, mettendo il nuovo nodo nel primo spazio vuoto in cui essa si inserisce. Questo dovrebbe ricostruire l'albero esattamente come è stato originariamente composto in O (n log n) in media.