Ik denk persoonlijk dat de beste manier om dit te doen zou zijn om te gaan voor een gerandomiseerde binaire zoekboom als een treap . Dit betekent niet absoluut garanderen dat de boom zal worden afgewogen, maar met een hoge waarschijnlijkheid zal de boom een goede balans factor hebben. Een treap werkt door het verhogen van ieder element van de structuur met een uniform willekeurig getal vervolgens voor te zorgen dat de boom is een binaire zoekboom opzichte van de sleutels en een heap met betrekking tot het uniforme willekeurige waarden. Het inbrengen in een treap is zeer eenvoudig:
- Kies een willekeurig getal toewijzen aan de nieuw toegevoegde element.
- Plaats het element in de BST behulp van standaard BST inbrengen.
- Terwijl de sleutel van de nieuw gestoken element groter is dan de sleutel van haar moedermaatschappij, het uitvoeren van een boom rotatie naar het nieuwe element boven zijn ouders te brengen.
Die laatste stap is het enige echt moeilijk, maar als je wat tijd om het uit te werken op een whiteboard Ik ben er vrij zeker van dat u dit zou kunnen implementeren van on-the-fly in een interview gehad.
Een andere optie die zou kunnen werken zou zijn om een te gebruiken splayboom . Het is een andere vorm van fast BST die kunnen worden toegepast ervan uitgaande dat je een standaard BST insert-functie en de mogelijkheid tot boom rotaties te doen. Belangrijk is splayboom zijn zeer snel in de praktijk, en het is bekend dat zij (tot binnen een constante factor) minstens zo goed als elke andere statische binary search boom.
Afhankelijk van wat er bedoeld wordt met "zoekboom," je zou ook kunnen overwegen het opslaan van de gehele getallen in enige structuur geoptimaliseerd voor het opzoeken van gehele getallen. Bijvoorbeeld, kan een gebruik bitsgewijze trie de integers, welke lookup ondersteunt in de tijd evenredig met het aantal bits in een machinewoord. Dit kan worden geïmplementeerd heel mooi met behulp van een recursieve functie om te kijken over de bits, en geen enkele vorm van rotaties vereisen. Als u die nodig zijn om uit te blazen een implementatie in vijftien minuten, en als de interviewer stelt u in staat om af te wijken van de standaard binary search bomen, dan kan dit een geweldige oplossing zijn.
Ik hoop dat dit helpt!