Track
/
Clojure
Clojure
/
Esercizi
/
Albero binario di ricerca
Albero binario di ricerca

Albero binario di ricerca

Medio

Istruzioni

Inserisci e cerca numeri in un albero binario.

Quando dobbiamo rappresentare dati ordinati, un array non è una buona struttura dati.

Immaginiamo di avere l'array [1, 3, 4, 5] e di aggiungervi 2, che diventa così [1, 3, 4, 5, 2]. Ora dobbiamo ordinare di nuovo l'intero array! Possiamo migliorare la cosa rendendoci conto che dobbiamo solo creare spazio per il nuovo elemento [1, nil, 3, 4, 5] e poi inserirlo nello spazio che abbiamo creato. Ma questo ci obbliga comunque a spostare di una posizione molti elementi.

Gli alberi binari di ricerca, invece, possono operare su dati ordinati in modo molto più efficiente.

Un albero binario di ricerca è formato da una serie di nodi collegati. Ogni nodo contiene un dato (ad esempio il numero 3), una variabile chiamata left e una variabile chiamata right. Le variabili left e right puntano a nil oppure ad altri nodi. Dato che questi altri nodi hanno a loro volta altri nodi al di sotto, diciamo che le variabili left e right puntano a sottoalberi. Tutti i dati nel sottoalbero sinistro sono minori o uguali al dato del nodo corrente, e tutti i dati nel sottoalbero destro sono maggiori del dato del nodo corrente.

Ad esempio, se avessimo un nodo contenente il dato 4 e aggiungessimo il dato 2, il nostro albero sarebbe così:

Un grafo con il nodo radice 4 e un unico nodo figlio 2.

      4
     /
    2

Se poi aggiungessimo 6, sarebbe così:

Un grafo con il nodo radice 4 e due nodi figli 2 e 6.

      4
     / \
    2   6

Se poi aggiungessimo 3, sarebbe così

Un grafo con il nodo radice 4, due nodi figli 2 e 6 e un nodo nipote 3.

       4
     /   \
    2     6
     \
      3

E se poi aggiungessimo 1, 5 e 7, sarebbe così

Un grafo con il nodo radice 4, due nodi figli 2 e 6 e quattro nodi nipoti 1, 3, 5 e 7.

          4
        /   \
       /     \
      2       6
     / \     / \
    1   3   5   7

Crediti

Le immagini sono state create da habere-et-dispertire usando PGF/TikZ di Till Tantau.


Fonte

Josh Cheek
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Clojure Exercism

Vuoi iniziare Albero binario di ricerca?

Iscriviti a Exercism per imparare e padroneggiare Clojure con 12 concetti105 esercizi e il mentoring di persone reali, tutto gratis.