Personalmente ritengo che il modo migliore per farlo sarebbe quello di andare a fare un albero binario di ricerca randomizzato come un Treap . Questo non assolutamente garantire che l'albero sarà equilibrato, ma con alta probabilità l'albero avrà un buon fattore di equilibrio. Un Treap funziona aumentando ogni elemento di albero con un numero uniformemente casuale, quindi assicurando che l'albero è un albero binario di ricerca rispetto ai tasti e un mucchio rispetto ai valori casuali uniformi. L'inserimento in un Treap è estremamente facile:
- Scegliere un numero casuale da assegnare all'elemento appena aggiunto.
- Inserire l'elemento nella BST mediante inserimento BST standard.
- Mentre il tasto dell'elemento appena inserita è maggiore la chiave del suo genitore, eseguire una rotazione albero per portare il nuovo elemento di sopra del suo genitore.
Questo ultimo passo è quello unico davvero difficile, ma se si ha un po 'di tempo per lavorare fuori su una lavagna sono abbastanza sicuro che si potrebbe implementare questo on-the-fly in un'intervista.
Un'altra opzione che potrebbe funzionare sarebbe quella di utilizzare un albero splay . E 'un altro tipo di BST veloce che può essere implementato a patto di avere una funzione di inserimento BST standard e la capacità di fare le rotazioni degli alberi. È importante sottolineare che, albero splay sono estremamente veloci, in pratica, ed è noto che sono (a meno di un fattore costante) almeno buono come qualsiasi altra statica albero binario di ricerca.
A seconda di cosa si intende con "albero di ricerca," si potrebbe anche prendere in considerazione la memorizzazione dei numeri interi in qualche struttura ottimizzata per la ricerca di numeri interi. Ad esempio, è possibile utilizzare un trie bit a bit per memorizzare i numeri interi, che sostiene di ricerca in tempo proporzionale al numero di bit in una parola della macchina. Ciò può essere implementato abbastanza bene utilizzando una funzione ricorsiva di guardare oltre i bit, e non richiede alcun tipo di rotazioni. Se avete bisogno di fare saltare fuori un'implementazione in un quarto d'ora, e se l'intervistatore consente di deviare dal alberi binari di ricerca standard, allora questo potrebbe essere una grande soluzione.
Spero che questo ti aiuti!