I classici esempi del BST dimostrano un set dove c'è una voce per un dato valore in la struttura. Un esempio di questo è il TreeSet in Java (sì, questo è un albero rosso-nero dietro le quinte - ma è un albero e un set).
Tuttavia, non c'è nulla che dice che non ci possono essere valori aggiuntivi memorizzati nella posizione indicata dal valore. Una volta che hai deciso di farlo, diventa un array associativo (a volte chiamato mappa). Anche in questo caso, andando in Java per l'esempio, c'è la TreeMap .
Un esempio di questo potrebbe essere:
TreeMap<Integer, String> ageToName = new TreeMap<Integer, String>();
ageToName.put(4,"Alice");
ageToName.put(25,"Bob");
ageToName.put(16,"Charlie");
La struttura di questo sarebbe:
16 -> Charlie
/ \
/ \
4 -> Alice 25 -> Bob
Un albero binario bilanciato (la parte rosso-nero di quella struttura) con un figlio sinistro e un bambino destro. Puoi accedervi cercando il valore 4, o 16, o 25 e recuperare i dati associati memorizzati in quel nodo.
Un aspetto dell'albero è che non puoi avere due valori diversi con lo stesso indice. Non c'è modo con questo design di inserire anche David a 16 anni. Tuttavia, potrebbe inserire un'altra struttura di dati come un elenco anziché String
nel nodo e consentire di memorizzare più elementi in tale elenco.
Ma l'albero (binario), di per sé, è un insieme che richiede che gli indici siano confrontabili (ordinabili) e che contenga solo valori distinti (senza duplicati).
Comprendi che ognuno è libero di implementare i propri alberi e set e come si occupano dell'aggiunta di un altro oggetto con la stessa chiave. Con un set di alberi, se si aggiunge un valore già esistente, la funzione di aggiunta restituisce false e lascia il set invariato. Con una TreeMap, se chiami put con una chiave già esistente, sostituisce il vecchio valore e restituisce il valore sostituito (null se non c'era nulla).
Che dovrebbe accadere è tutto ciò che è necessario che si verifichi per tale implementazione. Non ci sono tavolette inscritte che firmino tutti gli scienziati informatici che dettano come dovrebbe comportarsi qualsiasi struttura di dati astratti. Si comportano come dovrebbero e quando devono comportarsi in altri modi, documentarlo e farlo in quel modo.