Differenza tra albero binario e albero di ricerca binario


Risposte:


567

Albero binario: albero in cui ogni nodo ha fino a due foglie

  1
 / \
2   3

Albero di ricerca binario: utilizzato per la ricerca . Un albero binario in cui il figlio di sinistra contiene solo nodi con valori inferiori al nodo padre e in cui il figlio di destra contiene solo nodi con valori maggiori o uguali al padre.

  2
 / \
1   3

14
@pete: è una cosa concettuale, non ne avrai mai necessariamente una completamente libera. Tuttavia, ci sono molti alberi binari non di ricerca che sono speciali in qualche altro modo, ad esempio cumuli binari.
user541686,

19
Gli alberi di birary @pete non devono necessariamente contenere dati comparabili, molti alberi binari (non di ricerca) vengono utilizzati per l'analisi dell'espressione algebrica, l'albero binario è perfetto per scrivere un parser di notazione infix, posizionando l'operatore come nodo (i) e valori numerici come foglie
JBoy

2
@JBoy: In quel caso non saranno alberi binari. (Ad esempio gli operatori unari non possono avere due figli.) Non riesco davvero a pensare a un caso d'uso pratico per alberi binari non vincolati, ecco perché ho fatto quel commento.
user541686

2
Grande e semplice +1 per esempio visivo :)
Andrei Konstantinov,

@Mehrdad Un albero binario ha uno o due figli per nodo. Gli alberi delle espressioni sono un esempio perfetto. Un albero di ricerca binario ha anche uno o due figli per nodo, a meno che non sia pieno, cosa che può succedere solo con un certo numero di elementi.
Marchese di Lorne,

56

Binary Tree è una forma specializzata di albero con due figli (figlio sinistro e figlio destro). È semplicemente la rappresentazione di dati nella struttura ad albero

Binary Search Tree (BST) è un tipo speciale di albero binario che segue le seguenti condizioni:

  1. il nodo figlio sinistro è più piccolo del nodo principale
  2. il nodo figlio destro è maggiore del nodo principale

23
Queste condizioni non sono sufficienti. L'intera sottostruttura sinistra non deve contenere chiavi solo inferiori a quella del genitore e l'intera sottostruttura destra deve contenere nodi maggiori.
Marchese di Lorne,

1
@EJP puoi elaborare il tuo commento per favore? cosa intendi per sottostruttura intera? vuoi dire che tutti i valori di sottostruttura dovrebbero essere inferiori a quelli di root sul lato sinistro? e tutti i valori dovrebbero essere maggiori del valore di root sul lato destro?
Asif Mushtaq,

Seguendo il secondo link, leggi la sezione "Verifica" e sarà chiaro.
Rob

38

Un albero binario è costituito da nodi, in cui ogni nodo contiene un puntatore "a sinistra", un puntatore "a destra" e un elemento dati. Il puntatore "radice" punta al nodo più in alto nella struttura. I puntatori sinistro e destro puntano ricorsivamente a "sottotitoli" più piccoli su entrambi i lati. Un puntatore null rappresenta un albero binario senza elementi: l'albero vuoto. La definizione formale ricorsiva è: un albero binario è vuoto (rappresentato da un puntatore nullo) oppure è costituito da un singolo nodo, in cui i puntatori sinistro e destro (definizione ricorsiva in avanti) puntano ciascuno su un albero binario.

Un albero di ricerca binario (BST) o "albero binario ordinato" è un tipo di albero binario in cui i nodi sono disposti in ordine: per ciascun nodo, tutti gli elementi nella sua sottostruttura sinistra sono inferiori al nodo (<) e tutti gli elementi nella sua sottostruttura destra sono maggiori del nodo (>).

    5
   / \
  3   6 
 / \   \
1   4   9    

L'albero mostrato sopra è un albero di ricerca binario - il nodo "root" è un 5 e i suoi nodi di sottostruttura a sinistra (1, 3, 4) sono <5 e i suoi nodi di sottostruttura a destra (6, 9) sono> 5. Ricorsivamente, ciascuno dei sottotitoli deve anche obbedire al vincolo dell'albero di ricerca binario: nella sottostruttura (1, 3, 4), 3 è la radice, 1 <3 e 4> 3.

Fai attenzione alla formulazione esatta dei problemi: un "albero di ricerca binario" è diverso da un "albero binario".


@GabrielStaples Aggiunta struttura ad albero.
Gaurav Borole,

14

Come tutti sopra hanno spiegato sulla differenza tra albero binario e albero di ricerca binario, sto solo aggiungendo come testare se l'albero binario dato è albero di ricerca binario.

boolean b = new Sample().isBinarySearchTree(n1, Integer.MIN_VALUE, Integer.MAX_VALUE);
.......
.......
.......
public boolean isBinarySearchTree(TreeNode node, int min, int max)
{

    if(node == null)
    {
        return true;
    }

    boolean left = isBinarySearchTree(node.getLeft(), min, node.getValue());
    boolean right = isBinarySearchTree(node.getRight(), node.getValue(), max);

    return left && right && (node.getValue()<max) && (node.getValue()>=min);

}

Spero che ti possa aiutare. Scusatemi se mi sto allontanando dall'argomento perché ho sentito che vale la pena menzionarlo qui.


1
La sottostruttura sinistra o destra può essere vuota. Il tuo codice non gestisce questo caso correttamente.
Marchese di Lorne,

11

Albero binario sta per una struttura di dati composta da nodi che possono avere solo due riferimenti figlio .

L'albero di ricerca binario ( BST ), d'altra parte, è una forma speciale di struttura di dati dell'albero binario in cui ogni nodo ha un valore comparabile e figli con valori più piccoli associati a bambini con valori più grandi a sinistra e più grandi collegati a destra.

Pertanto, tutti i BST sono Albero binario, tuttavia solo alcuni Alberi binari possono essere anche BST . Notare che BST è un sottoinsieme dell'albero binario .

Pertanto, l' albero binario è più una struttura di dati generale che l' albero di ricerca binario . Inoltre, devi notificare che l' albero di ricerca binario è un albero ordinato mentre non esiste un insieme di regole per l' albero binario generico .

Albero binario

A Binary Treeche non è un BST;

         5
       /   \
      /     \
     9       2
    / \     / \
  15   17  19  21

Albero di ricerca binaria (albero ordinato)

Un albero di ricerca binario che è anche un albero binario ;

         50
       /    \
      /      \
     25      75
    /  \    /  \
  20    30 70   80

Proprietà del nodo dell'albero di ricerca binaria

Notare anche che per qualsiasi nodo padre nel BST ;

  • Tutti i nodi di sinistra hanno un valore inferiore rispetto al valore del nodo padre. Nell'esempio superiore, i nodi con valori {20, 25, 30} che si trovano tutti a sinistra ( discendenti di sinistra ) di 50, sono più piccoli di 50.

  • Tutti i nodi giusti hanno un valore maggiore rispetto al valore del nodo padre. Nell'esempio superiore, i nodi con valori {70, 75, 80} che si trovano tutti a destra ( discendenti a destra ) di 50, sono maggiori di 50.

Non esiste una regola del genere per il nodo dell'albero binario . L'unica regola per Binary Tree Node è avere due bambini, quindi si spiega da sé perché si chiama binario .


Possiamo implementare Simple Binary Tree? c'è qualche implementazione disponibile? e a che serve questo albero?
Asif Mushtaq,

@UnKnown È possibile utilizzare l'albero di ricerca binario per l'ordinamento e la ricerca. Puoi trovare l'implementazione dell'albero di ricerca binaria qui: github.com/bzdgn/data-structures-in-java/blob/master/src/…
Levent Divilioglu

Lo so ma esiste l'esistenza di Simple Tree o Simple Binary Tree? o qualsiasi implementazione di Simple Binary Tree?
Asif Mushtaq,

Non ha senso utilizzarlo, ma è possibile aggiungere istanze Node arbitrarie alla radice e ai figli.
Levent Divilioglu,

10

Un albero di ricerca binario è un tipo speciale di albero binario che presenta la seguente proprietà: per ogni nodo n, il valore di ogni nodo discendente nella sottostruttura sinistra di n è inferiore al valore di n, e il valore di ogni nodo discendente nella sottostruttura destra è maggiore del valore di n.


8

Albero binario

L'albero binario può essere qualsiasi cosa che abbia 2 figli e 1 genitore. Può essere implementato come elenco o array collegato o con l'API personalizzata. Una volta che inizi ad aggiungere regole più specifiche, diventa un albero più specializzato . L'implementazione più comune nota è quella di aggiungere nodi più piccoli a sinistra e nodi più grandi a destra.

Ad esempio, un albero binario etichettato di dimensioni 9 e altezza 3, con un nodo radice il cui valore è 2. L'albero è sbilanciato e non ordinato . https://en.wikipedia.org/wiki/Binary_tree

inserisci qui la descrizione dell'immagine

Ad esempio, nella struttura a sinistra, A ha i 6 figli {B, C, D, E, F, G}. Può essere convertito nell'albero binario a destra.

inserisci qui la descrizione dell'immagine

Ricerca binaria

La ricerca binaria è una tecnica / algoritmo che viene utilizzato per trovare elementi specifici nella catena di nodi. La ricerca binaria funziona su array ordinati .

La ricerca binaria confronta il valore target con l' elemento centrale dell'array; se sono disuguali, la metà in cui il bersaglio non può mentire viene eliminata e la ricerca continua sulla metà rimanente fino a quando non ha successo o la metà rimanente è vuota. https://en.wikipedia.org/wiki/Binary_search_algorithm

inserisci qui la descrizione dell'immagine

Un albero che rappresenta la ricerca binaria . L'array cercato qui è [20, 30, 40, 50, 90, 100] e il valore target è 40.

inserisci qui la descrizione dell'immagine

Albero di ricerca binario

Questa è una delle implementazioni dell'albero binario. Questo è specializzato per la ricerca .

L'albero di ricerca binario e le strutture di dati B-tree si basano sulla ricerca binaria .

Gli alberi di ricerca binaria (BST), a volte chiamati alberi binari ordinati o ordinati, sono un particolare tipo di contenitore : strutture di dati che memorizzano "elementi" (come numeri, nomi ecc.) In memoria. https://en.wikipedia.org/wiki/Binary_search_tree

Un albero di ricerca binario di dimensioni 9 e profondità 3, con 8 alla radice. Le foglie non sono disegnate.

inserisci qui la descrizione dell'immagine

E infine un ottimo schema per il confronto delle prestazioni di strutture dati e algoritmi ben noti applicati:

inserisci qui la descrizione dell'immagine

Immagine tratta da Algorithms (4a edizione)


4

Un albero binario è un albero i cui figli non sono mai più di due. Un albero di ricerca binario segue l'invariante che il figlio di sinistra dovrebbe avere un valore più piccolo della chiave del nodo radice, mentre il figlio di destra dovrebbe avere un valore maggiore della chiave del nodo radice.


4
  • Albero di ricerca binario: quando viene effettuato l'attraversamento degli ordini sull'albero binario, si ottengono i valori ordinati degli elementi inseriti
  • Albero binario: nessun ordine ordinato è stato trovato in nessun tipo di attraversamento

Non è necessario trovare un ordine ordinato . Un albero di ricerca binario è anche un albero binario. Non si escludono a vicenda. BST è un sottoinsieme proprio di BT.
Marchese di Lorne,

3

Per verificare se un determinato albero binario è un albero di ricerca binario, ecco un approccio alternativo.

Traverse Albero In Inorder moda (cioè Child Left -> Parent -> figlio destro), Negozio attraversato dei dati di nodo in una variabile temporanea consente di dire temperatura , poco prima della conservazione in temperatura , Controllare wheather Dati attuali nodo è superiore quindi quello precedente oppure no . Quindi basta scoppiarlo , Tree non è Binary Search Tree altrimenti attraversare fino alla fine.

Di seguito è riportato un esempio con Java:

public static boolean isBinarySearchTree(Tree root)
{
    if(root==null)
        return false;

    isBinarySearchTree(root.left);
    if(tree.data<temp)
        return false;
    else
        temp=tree.data;
    isBinarySearchTree(root.right);
    return true;
}

Mantiene la variabile temporanea all'esterno


Ciascuna sottostruttura può essere nulla. Il tuo algoritmo non gestisce questo caso correttamente.
Marchese di Lorne,

1

In un albero di ricerca binario, tutti i nodi sono disposti in un ordine specifico: i nodi a sinistra di un nodo radice hanno un valore più piccolo della sua radice e tutti i nodi a destra di un nodo hanno valori maggiori del valore del radice.


0

Un albero può essere chiamato come albero binario se e solo se il numero massimo di figli di uno dei nodi è due.

Un albero può essere chiamato come albero di ricerca binario se e solo se il numero massimo di figli di uno dei nodi è due e il figlio sinistro è sempre più piccolo del figlio destro.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.