logo

Struttura dei dati ad albero

Leggiamo le strutture dati lineari come un array, una lista concatenata, uno stack e una coda in cui tutti gli elementi sono disposti in maniera sequenziale. Le diverse strutture dati vengono utilizzate per diversi tipi di dati.

Alcuni fattori vengono considerati per la scelta della struttura dei dati:

    Che tipo di dati devono essere archiviati?: Potrebbe esserci la possibilità che una determinata struttura dati possa essere la soluzione migliore per qualche tipo di dati.Costo delle operazioni:Se vogliamo minimizzare il costo delle operazioni per le operazioni eseguite più frequentemente. Ad esempio abbiamo una semplice lista sulla quale dobbiamo effettuare l'operazione di ricerca; quindi, possiamo creare un array in cui gli elementi sono memorizzati in ordine per eseguire l'operazione ricerca binaria . La ricerca binaria funziona molto velocemente per l'elenco semplice poiché divide lo spazio di ricerca a metà.Utilizzo della memoria:A volte, vogliamo una struttura dati che utilizzi meno memoria.

Un albero è anche una delle strutture dati che rappresentano i dati gerarchici. Supponiamo di voler mostrare i dipendenti e le loro posizioni in forma gerarchica, quindi possiamo rappresentarli come mostrato di seguito:

Albero

L'albero sopra mostra il gerarchia organizzativa di qualche azienda. Nella struttura di cui sopra, John è il Amministratore delegato dell'azienda e John ha due rapporti diretti denominati come Steve E Rohan . Steve ha tre rapporti diretti nominati Lee, Bob, Ella Dove Steve è un manager. Bob ha due rapporti diretti nominati Deve E Emma . Emma ha due rapporti diretti nominati Tom E Raj . Tom ha un subordinato diretto nominato Conto . Questa particolare struttura logica è nota come a Albero . La sua struttura è simile all'albero vero, per questo è chiamato a Albero . In questa struttura, il radice è in alto e i suoi rami si muovono verso il basso. Pertanto, possiamo dire che la struttura dati Tree è un modo efficiente di archiviare i dati in modo gerarchico.

Comprendiamo alcuni punti chiave della struttura dati dell'Albero.

  • Una struttura dati ad albero è definita come una raccolta di oggetti o entità noti come nodi collegati insieme per rappresentare o simulare la gerarchia.
  • Una struttura dati ad albero è una struttura dati non lineare perché non viene memorizzata in modo sequenziale. È una struttura gerarchica poiché gli elementi in un albero sono disposti su più livelli.
  • Nella struttura dati Tree, il nodo più in alto è noto come nodo radice. Ogni nodo contiene alcuni dati e i dati possono essere di qualsiasi tipo. Nella struttura ad albero sopra, il nodo contiene il nome del dipendente, quindi il tipo di dati sarebbe una stringa.
  • Ogni nodo contiene alcuni dati e il collegamento o riferimento di altri nodi che possono essere chiamati figli.

Alcuni termini di base utilizzati nella struttura dati dell'albero.

Consideriamo la struttura ad albero, che è mostrata di seguito:

Albero

Nella struttura sopra, ogni nodo è etichettato con un numero. Ciascuna freccia mostrata nella figura sopra è nota come a collegamento tra i due nodi.

    Radice:Il nodo radice è il nodo più in alto nella gerarchia dell'albero. In altre parole, il nodo radice è quello che non ha alcun genitore. Nella struttura sopra, il nodo numerato 1 è il nodo radice dell'albero. Se un nodo è direttamente collegato a qualche altro nodo, verrebbe chiamata relazione genitore-figlio.Nodo figlio:Se il nodo è un discendente di qualsiasi nodo, allora il nodo è noto come nodo figlio.Genitore:Se il nodo contiene un sottonodo, allora quel nodo si dice che sia il genitore di quel sottonodo.Fratello:I nodi che hanno lo stesso genitore sono conosciuti come fratelli.Nodo Foglia:-Il nodo dell'albero, che non ha alcun nodo figlio, è chiamato nodo foglia. Un nodo foglia è il nodo più in basso dell'albero. Può essere presente un numero qualsiasi di nodi foglia in un albero generale. I nodi foglia possono anche essere chiamati nodi esterni.Nodi interni:Un nodo ha almeno un nodo figlio noto come an interno Nodo antenato: -Un antenato di un nodo è qualsiasi nodo predecessore su un percorso dalla radice a quel nodo. Il nodo radice non ha antenati. Nell'albero mostrato nell'immagine sopra, i nodi 1, 2 e 5 sono gli antenati del nodo 10.Discendente:L'immediato successore del nodo dato è noto come discendente di un nodo. Nella figura sopra, 10 è il discendente del nodo 5.

Proprietà della struttura dati dell'albero

    Struttura dati ricorsiva:L'albero è anche conosciuto come a struttura dati ricorsiva . Un albero può essere definito ricorsivo perché il nodo distinto in una struttura dati ad albero è noto come a nodo radice . Il nodo radice dell'albero contiene un collegamento a tutte le radici dei suoi sottoalberi. Il sottoalbero sinistro è mostrato in giallo nella figura seguente, mentre il sottoalbero destro è mostrato in rosso. Il sottoalbero di sinistra può essere ulteriormente suddiviso in sottoalberi mostrati in tre colori diversi. La ricorsione significa ridurre qualcosa in modo autosimile. Quindi, questa proprietà ricorsiva della struttura dei dati ad albero è implementata in varie applicazioni.
    Albero Numero di bordi:Se ci sono n nodi, allora ci sarebbero n-1 spigoli. Ogni freccia nella struttura rappresenta il collegamento o il percorso. Ogni nodo, tranne il nodo radice, avrà almeno un collegamento in entrata noto come bordo. Ci sarebbe un collegamento per la relazione genitore-figlio.Profondità del nodo x:La profondità del nodo x può essere definita come la lunghezza del percorso dalla radice al nodo x. Un bordo contribuisce alla lunghezza di un'unità del percorso. Quindi, la profondità del nodo x può anche essere definita come il numero di spigoli tra il nodo radice e il nodo x. Il nodo radice ha profondità 0.Altezza del nodo x:L'altezza del nodo x può essere definita come il percorso più lungo dal nodo x al nodo foglia.

In base alle proprietà della struttura dati Albero, gli alberi vengono classificati in varie categorie.

Implementazione dell'albero

La struttura dati dell'albero può essere creata creando dinamicamente i nodi con l'aiuto dei puntatori. L'albero in memoria può essere rappresentato come mostrato di seguito:

Albero

La figura sopra mostra la rappresentazione della struttura dati ad albero in memoria. Nella struttura precedente, il nodo contiene tre campi. Il secondo campo memorizza i dati; il primo campo memorizza l'indirizzo del figlio di sinistra e il terzo campo memorizza l'indirizzo del figlio di destra.

natasha dalal

Nella programmazione, la struttura di un nodo può essere definita come:

 struct node { int data; struct node *left; struct node *right; } 

La struttura di cui sopra può essere definita solo per gli alberi binari perché l'albero binario può avere al massimo due figli e gli alberi generici possono avere più di due figli. La struttura del nodo per alberi generici sarebbe diversa rispetto all'albero binario.

Applicazioni degli alberi

Le seguenti sono le applicazioni degli alberi:

    Memorizzazione dei dati in modo naturalmente gerarchico:Gli alberi vengono utilizzati per memorizzare i dati nella struttura gerarchica. Ad esempio, il file system. Il file system memorizzato sull'unità disco, il file e la cartella sono sotto forma di dati naturalmente gerarchici e memorizzati sotto forma di alberi.Organizza i dati:Viene utilizzato per organizzare i dati per un efficiente inserimento, cancellazione e ricerca. Ad esempio, un albero binario ha un tempo logN per la ricerca di un elemento.Prova:È un tipo speciale di albero utilizzato per archiviare il dizionario. È un modo veloce ed efficiente per il controllo ortografico dinamico.Mucchio:È anche una struttura dati ad albero implementata utilizzando array. Viene utilizzato per implementare le code di priorità.B-Tree e B+Tree:B-Tree e B+Tree sono le strutture dati ad albero utilizzate per implementare l'indicizzazione nei database.Tabella di instradamento:La struttura dei dati ad albero viene utilizzata anche per memorizzare i dati nelle tabelle di instradamento nei router.

Tipi di struttura dati dell'albero

Di seguito sono riportati i tipi di struttura dati ad albero:

    Albero generale:L'albero generale è uno dei tipi di struttura dati ad albero. Nell'albero generale, un nodo può avere 0 o un numero massimo di nodi. Non vi è alcuna restrizione imposta sul grado del nodo (il numero di nodi che un nodo può contenere). Il nodo più in alto in un albero generale è noto come nodo radice. I figli del nodo genitore sono conosciuti come sottoalberi .
    Albero
    Ci può essere N numero di sottoalberi in un albero generale. Nell'albero generale, i sottoalberi non sono ordinati poiché i nodi nel sottoalbero non possono essere ordinati.
    Ogni albero non vuoto ha un bordo rivolto verso il basso e questi bordi sono collegati ai nodi detti nodi figli . Il nodo radice è etichettato con il livello 0. I nodi che hanno lo stesso genitore sono noti come fratelli . Albero binario :Qui, il nome binario stesso suggerisce due numeri, cioè 0 e 1. In un albero binario, ciascun nodo di un albero può avere al massimo due nodi figli. Qui, massimo significa se il nodo ha 0 nodi, 1 nodo o 2 nodi.
    Albero
    Per saperne di più sull'albero binario, fare clic sul collegamento indicato di seguito:
    https://www.javatpoint.com/binary-tree Albero di ricerca binaria :L'albero di ricerca binario è una struttura dati non lineare a cui è connesso un nodo N numero di nodi. È una struttura dati basata su nodi. Un nodo può essere rappresentato in un albero di ricerca binario con tre campi, ovvero parte dati, figlio sinistro e figlio destro. Un nodo può essere connesso al massimo di due nodi figli in un albero di ricerca binario, quindi il nodo contiene due puntatori (figlio sinistro e puntatore figlio destro).
    Ogni nodo nel sottoalbero di sinistra deve contenere un valore inferiore al valore del nodo radice e il valore di ciascun nodo nel sottoalbero di destra deve essere maggiore del valore del nodo radice.

Un nodo può essere creato con l'aiuto di un tipo di dati definito dall'utente noto come struttura, come mostrato di seguito:

 struct node { int data; struct node *left; struct node *right; } 

Quella sopra è la struttura del nodo con tre campi: campo dati, il secondo campo è il puntatore sinistro del tipo di nodo e il terzo campo è il puntatore destro del tipo di nodo.

Per saperne di più sull'albero di ricerca binario, fare clic sul collegamento indicato di seguito:

https://www.javatpoint.com/binary-search-tree

È uno dei tipi dell'albero binario, o possiamo dire che è una variante dell'albero binario di ricerca. L'albero AVL soddisfa la proprietà di albero binario nonché del albero di ricerca binario . È un albero di ricerca binario autobilanciante inventato da Adelson Velsky Lindas . Qui, autobilanciamento significa bilanciare le altezze del sottoalbero sinistro e del sottoalbero destro. Questo equilibrio è misurato in termini di fattore di equilibrio .

stringa in C++

Possiamo considerare un albero come un albero AVL se obbedisce all'albero di ricerca binario e ad un fattore di bilanciamento. Il fattore di bilanciamento può essere definito come il differenza tra l'altezza del sottoalbero sinistro e l'altezza del sottoalbero destro . Il valore del fattore di bilanciamento deve essere 0, -1 o 1; pertanto, ciascun nodo nell'albero AVL dovrebbe avere il valore del fattore di bilanciamento come 0, -1 o 1.

Per saperne di più sull'albero AVL, fare clic sul collegamento indicato di seguito:

https://www.javatpoint.com/avl-tree

    Albero Rosso-Nero

L'albero rosso-nero è l'albero di ricerca binario. Il prerequisito dell'albero Rosso-Nero è che dovremmo conoscere l'albero di ricerca binario. In un albero di ricerca binario, il valore del sottoalbero sinistro dovrebbe essere inferiore al valore di quel nodo e il valore del sottoalbero destro dovrebbe essere maggiore del valore di quel nodo. Come sappiamo, la complessità temporale della ricerca binaria nel caso medio è log2n, il caso migliore è O(1) e il caso peggiore è O(n).

Quando viene eseguita qualsiasi operazione sull'albero, vogliamo che il nostro albero sia bilanciato in modo che tutte le operazioni come ricerca, inserimento, cancellazione, ecc., richiedano meno tempo e tutte queste operazioni abbiano la complessità temporale di tronco d'albero2N.

L'albero rosso-nero è un albero di ricerca binario autobilanciante. L'albero AVL è quindi anche un albero di ricerca binario con bilanciamento dell'altezza perché abbiamo bisogno di un albero rosso-nero . Nell'albero AVL, non sappiamo quante rotazioni sarebbero necessarie per bilanciare l'albero, ma nell'albero Rosso-nero sono necessarie un massimo di 2 rotazioni per bilanciare l'albero. Contiene un bit in più che rappresenta il colore rosso o nero di un nodo per garantire il bilanciamento dell'albero.

    Albero disteso

La struttura dati dell'albero splay è anche un albero di ricerca binario in cui l'elemento a cui si è avuto accesso di recente viene posizionato nella posizione radice dell'albero eseguendo alcune operazioni di rotazione. Qui, allargamento indica il nodo a cui si è avuto accesso di recente. È un autobilanciamento albero di ricerca binario che non ha alcuna condizione di equilibrio esplicita come AVL albero.

Potrebbe essere possibile che l'altezza dell'albero di splay non sia bilanciata, ovvero l'altezza dei sottoalberi sinistro e destro possa differire, ma le operazioni nell'albero di splay seguono l'ordine di calma tempo dove N è il numero di nodi.

L'albero strombato è un albero equilibrato ma non può essere considerato un albero equilibrato in altezza perché dopo ogni operazione viene eseguita la rotazione che porta ad un albero equilibrato.

    Trep

La struttura dei dati Treap proviene dalla struttura dei dati Tree e Heap. Pertanto, comprende le proprietà delle strutture dati sia Tree che Heap. Nell'albero di ricerca binario, ogni nodo del sottoalbero di sinistra deve essere uguale o inferiore al valore del nodo radice e ogni nodo del sottoalbero di destra deve essere uguale o maggiore del valore del nodo radice. Nella struttura dei dati heap, sia il sottoalbero destro che quello sinistro contengono chiavi più grandi della radice; pertanto, possiamo dire che il nodo radice contiene il valore più basso.

Nella struttura dati di treap, ogni nodo ha entrambi chiave E priorità dove la chiave è derivata dall'albero di ricerca binario e la priorità è derivata dalla struttura dei dati heap.

stringa in Java

IL Trep la struttura dei dati segue due proprietà che sono riportate di seguito:

  • Figlio destro di un nodo>= nodo corrente e figlio sinistro di un nodo<=current node (binary tree)< li>
  • I figli di qualsiasi sottoalbero devono essere maggiori del nodo (heap)
    B-albero

Il B-tree è un equilibrato m-way albero dove M definisce l'ordine dell'albero. Finora abbiamo letto che il nodo contiene una sola chiave ma il b-tree può avere più di una chiave e più di 2 figli. Mantiene sempre i dati ordinati. Nell'albero binario, è possibile che i nodi foglia possano trovarsi a livelli diversi, ma nell'albero b tutti i nodi foglia devono essere allo stesso livello.

Se l'ordine è m allora il nodo ha le seguenti proprietà:

  • Ogni nodo in un albero b può avere il massimo M bambini
  • Per i figli minimi, un nodo foglia ha 0 figli, il nodo radice ha un minimo di 2 figli e il nodo interno ha un tetto minimo di m/2 figli. Ad esempio, il valore di m è 5, il che significa che un nodo può avere 5 figli e i nodi interni possono contenere un massimo di 3 figli.
  • Ogni nodo ha un numero massimo di chiavi (m-1).

Il nodo radice deve contenere almeno 1 chiave e tutti gli altri nodi devono contenerne almeno 1 soffitto di m/2 meno 1 chiavi.