Jeg personlig tror at den beste måten å gjøre dette ville være å gå for en randomisert binært søketre som en treap . Dette betyr ikke absolutt garantere at treet skal være balansert, men med stor sannsynlighet vil treet ha en god balanse faktor. En treap virker ved å forsterke hvert element av treet med en ensartet tilfeldig tall, da slik at treet er et binært søk treet med hensyn til tastene og en haug med hensyn til de ensartede tilfeldige verdier. Innsetting i en treap er svært enkelt:
- Plukk en tilfeldig tall tilordne til nyopprettede element.
- Sett elementet inn i BST ved hjelp av standard BST innsetting.
- Mens den nylig innsatt lementets nøkkel er større enn styrings av moder, utføre en tre rotasjon for å bringe det nye elementet over dens forelder.
Det siste trinnet er det bare veldig vanskelig en, men hvis du hadde litt tid til å finne ut av det på en tavle jeg er ganske sikker på at du kan implementere dette on-the-fly i et intervju.
Et annet alternativ som kan fungere ville være å bruke en spriker tre . Det er en annen type fast BST som kan iverksettes forutsatt at du har en standard BST innsats funksjon og evnen til å gjøre tre rotasjoner. Viktigere, sprikende trær er ekstremt rask i praksis, og det er kjent at de er (til innenfor en konstant faktor) minst like godt som alle andre statisk binært søketre.
Avhengig av hva som menes med "søketre," du kan også vurdere å lagre heltall i noen struktur optimalisert for oppslag av heltall. For eksempel kan du bruke en bitvis trie å lagre heltall, som støtter oppslag i tid proporsjonal med antall bits i en maskin ord. Dette kan gjennomføres ganske fint å bruke en rekursiv funksjon for å se over de biter, og krever ikke noen form for rotasjoner. Hvis du trenger å sprenge ut en implementering i femten minutter, og hvis intervjueren gjør det mulig å avvike fra standard binære søketrær, så dette kan være en god løsning.
Håper dette hjelper!