introduzione
Un albero nel software è come un albero biologico, ma con le seguenti differenze:
I rami dell'albero del software sono rappresentati da linee rette. Un buon esempio di un albero software che potresti aver usato è l'albero di directory del disco rigido del tuo computer.
Esistono diversi tipi di alberi. C'è l'albero generale da cui derivano altri alberi. Altri alberi sono derivati introducendo vincoli nell'albero generale. Ad esempio, potresti voler un albero in cui non più di due rami emana da un nodo; Un tale albero sarebbe chiamato un albero binario. Questo articolo descrive l'albero generale e come accedere a tutti i suoi nodi.
Il collegamento ipertestuale per scaricare il codice è riportato in fondo a questo articolo.
Per comprendere i campioni di codice in questo articolo, è necessario avere conoscenze di base in JavaScript (ECMAScript). Se non hai questa conoscenza, allora puoi ottenerlo da http: // www.network a Broad.com/Chrysanthusforcha-1/ECMAScript-2015-Course.htm
Il diagramma dell'albero generale
'A' è il nodo radice; È il nodo di primo livello. B, C, D sono sulla seconda riga; Questi sono nodi di secondo livello. E, F, G, H, I, J, K sono sulla terza riga e sono nodi di terzo livello. Una quarta riga avrebbe prodotto nodi di quarto livello, e così via.
Proprietà degli alberi
- Tutti i rami per tutti i livelli di nodi, hanno una sorgente, che è il nodo radice.
- Un albero ha n - 1 rami, dove n è il numero totale di nodi. Il diagramma sopra per l'albero generale ha 11 nodi e 10 rami.
- A differenza degli umani, dove ogni bambino ha due genitori, con l'albero del software, ogni bambino ha un solo genitore. Il nodo radice è il più grande genitore antenato. Un genitore può avere più di un figlio. Ogni nodo, tranne il nodo radice, è un bambino.
Vocabolario degli alberi
Attraversando tutti i nodi di un albero
È possibile accedere a tutti i nodi di un albero per leggere o modificare qualsiasi valore del nodo. Tuttavia, questo non è fatto arbitrariamente. Esistono tre modi per farlo, tutti i quali coinvolgono la prima attraversamento come segue:
1) in ordine: In parole povere, in questo schema, la sottostruttura sinistra è attraversata per prima; Quindi, si accede al nodo radice; Quindi, la sottostruttura destra viene attraversata. Questo schema è simboleggiato come a sinistra-> radice-> a destra. La Fig 1 viene ri-esplosa qui per un facile riferimento:
Supponendo che ci siano due fratelli per nodo; Quindi a sinistra-> root-> a destra significa prima accedere al nodo più basso e sinistro, quindi il genitore del nodo, quindi il fratello destro. Quando ci sono più di due fratelli, prendi il primo come sinistro e il resto dei nodi destro, come a destra. Per l'albero generale sopra, si accede alla sottostruttura in basso a sinistra per avere, [EBF]. Questa è una sottostruttura. Il genitore di questa sottostruttura è un; Quindi, A è successivamente accessibile ad avere [EBF] a. Successivamente, la sottostruttura [gchi] è accessibile per avere una sottostruttura più grande, [[ebf] a [gchi]]. Puoi vedere il profilo a sinistra-> root-> destro che si ritrae. Questa grande sottostruttura di sinistra avrà la sottostruttura, [JDK] alla sua destra per completare la attraversamento per ottenere, [[EBF] A [GCHI]] [JDK].
2) preordine: In parole povere, in questo schema si accede prima al nodo radice, quindi la sottostruttura sinistra viene attraversata in seguito, quindi la sottostruttura destra viene attraversata. Questo schema è simboleggiato come radice-> sinistra-> a destra. La Fig 1 viene ri-esplicata qui per un facile riferimento.
Supponendo che ci siano due fratelli per nodo; quindi root-> sinistra-> a destra significa prima accedere alla radice, quindi il bambino immediato sinistro, quindi il bambino immediato destro. Quando ci sono più di due fratelli, prendi il primo come sinistro e il resto dei nodi destro, come a destra. Il figlio più a sinistra del bambino sinistro è il prossimo a cui si accede. Per l'albero generale sopra, la sottostruttura della radice è [ABCD]. A sinistra di questa sottostruttura, hai la sottostruttura, [ef], dando la sequenza di accesso, [ABCD] [EF]. A destra di questa sottostruttura più grande, hai due sottostrutimenti, [Ghi] e [JK], dando la sequenza completa, [ABCD] [EF] [GHI] [JK]. Puoi vedere la radice-> sinistra-> profilo destro che si ritrae.
3) post-ordine: In parole povere, in questo schema, la sottostruttura sinistra viene attraversata per prima, quindi la sottostruttura destra viene attraversata, quindi si accede alla radice. Questo schema è simboleggiato come a sinistra-> destra-> root. La Fig 1 viene ri-esplicata qui per un facile riferimento.
Per questo albero i sottospelle sono, [efb], [ghic], [jkd] e [a] che formano la sequenza, [efb], [ghic], [jkd] [a]. Puoi vedere il profilo a sinistra-> destro-> root che si ritrae.
Creare l'albero
L'albero sopra verrà creato usando ECMascript, che è come l'ultima versione di JavaScript. Ogni nodo è un array. Il primo elemento di ciascun array di nodi è il genitore del nodo, un altro array. Il resto degli elementi del nodo sono i bambini del nodo, a partire dal bambino più a sinistra. C'è una mappa ECMAScript che mette in relazione ogni array con la sua stringa corrispondente (lettera). Il primo segmento di codice è:
In ECMAScript, è possibile accedere a una funzione definita più in basso nel programma. Tuttavia, con le variabili, non puoi farlo. Non è possibile accedere a una variabile definita più in basso nel programma. Questo è il motivo per cui le variabili sopra sono state sviluppate come mostrato.
Inoltre, si noti che sopra il nodo radice A, c'è un altro nodo O (non zero). Il primo elemento di questo array (nodo) è indefinito, il che significa che il proprio genitore è indefinito. Il nodo extra O è stato aggiunto per semplificare il codice di attraversamento.
C'è anche una mappa. La mappa mette in relazione ogni array di nomi di una lettere, al nome della stringa corrispondente di una lettera.
Funzione ricorsiva
Per accedere a tutti gli elementi di un albero, hai bisogno di una funzione ricorsiva. Una funzione ricorsiva è una funzione che continua a chiamarsi fino a quando non viene soddisfatta una condizione.
Visitare un nodo non significa necessariamente accedere al nodo. Per accedere a un nodo significa che il suo valore viene letto o modificato. Nei campioni di codice di questo articolo, accedere a un nodo significa leggere e visualizzare il valore (chiave) del nodo. Nei campioni di codice, un nodo può essere visitato più di una volta, ma il suo valore è accessibile una sola volta.
Algoritmo e programmazione
C'è un programma per ciascuna delle tre tecniche di attraversamento.
Algoritmo in ordine e programmazione
Qui, il nodo più basso e più a sinistra viene visitato per primo. I sottostrutimenti [EBF], [[EBF] A [GCHI]] e [JDK] sono sviluppati per dare la sequenza completa, [[EBF] A [GCHI]] [JDK].
Esistono due funzioni ricorsive per questo programma, in cui ognuno chiama l'altro. Quello principale si chiama FN (nodo). Il programma (codice) è breve. Scarica il file combinato di seguito per la codifica dei dettagli.
I tre programmi hanno la stessa configurazione di Array Tree (NODE).
Algoritmo pre-ordine e programmazione
Qui c'è solo una funzione ricorsiva. Si chiama, fn (nodo). Qui, i sottostrutimenti [ABCD], [EF], [Ghi] e [JK] sono sviluppati per dare la sequenza completa, [ABCD] [EF] [Ghi] [JK]. Anche il programma per questo è breve.
I tre programmi hanno la stessa configurazione di Array Tree (NODE).
Algoritmo post-ordine e programmazione
Qui, il nodo più basso e più a sinistra viene visitato per primo. I sottostrutimenti [EFB], [Ghic], [JKD] e [A] sono sviluppati per dare la sequenza completa, [EFB], [Ghic], [JKD] [A] .
Esistono due funzioni ricorsive per questo programma, in cui ognuno chiama l'altro. Quello principale si chiama FN (nodo). Anche il programma per questo è breve. Scarica il file combinato di seguito per la codifica dettagliata.
I tre programmi hanno la stessa configurazione di Array Tree (NODE).
Tipi di alberi
Gli alberi di programmazione del computer sono, in effetti, strutture di dati non lineari. Le strutture di dati lineari sono elenchi, array, stack, code, stack, ecc. Un albero con n nodi ha rami N-1. Quando il numero di rami è uguale o maggiore del numero di nodi, si ottiene un grafico. Un grafico non è proprio un albero.
Ci sono alberi software, che descrivono layout, come l'albero della directory nel disco rigido di un computer. Molti alberi non descrivono affatto i layout esistenti. In effetti, descrivono gli algoritmi. Ad esempio, l'algoritmo matematico (x + y) x (x -y) è descritto da un albero in cui x è il nodo radice, quindi + e - sono nodi figli immediati della radice. xey sono nodi per bambini di +. X e Y sono di nuovo bambini nodi di -. Un tale albero è noto come un albero di espressione.
Molti diversi tipi di alberi possono essere classificati in titoli diversi; come albero binario, albero b, albero di espressione, ecc. Tutti sono derivati dall'albero generale.
Alcune delle categorie degli alberi sono divise in ulteriori categorie. L'albero binario, ad esempio, ha almeno l'albero di ricerca binaria, l'albero AVL e l'albero cartesiano.
Download
Per questo articolo sono stati forniti tre programmi. Esiste un programma per la tecnica in-ordine (algoritmo), un altro per la tecnica di pre-ordine e un altro per la tecnica post-ordine. Tutti sono stati messi in un file zip, chiamato Traversing. Il file zip può essere scaricato su: github.
Conclusione
Un albero di software è come un albero normale nel parco o nella foresta. Tuttavia, l'albero di programmazione del computer è capovolto. Esistono diversi tipi di alberi. Altri alberi sono derivati introducendo vincoli nell'albero generale. È possibile accedere a tutti i nodi di un albero utilizzando un algoritmo in ordine, preordine o post-ordine. Un albero di software può essere prodotto da qualsiasi lingua di computer. Ecmascript è stato scelto qui perché è il linguaggio del computer più semplice. Il prossimo tipo di albero che dovresti studiare è l'albero binario poiché è la struttura dei dati degli alberi più popolare.