Ik heb het coderen van een heleboel verschillende binaire zoekboom implementaties onlangs (AVL, splay, treap) en ben benieuwd of er een bijzonder goede manier om een iterator om deze structuren te doorkruisen te schrijven. De oplossing die ik heb op dit moment gebruikt wordt om elk knooppunt in de BST winkel verwijzingen naar de volgende en vorige elementen in de boom, die iteratie reduceert tot een standaard gekoppelde-list iteratie hebben. Echter, ik ben niet echt tevreden met dit antwoord. Het verhoogt de ruimte gebruik van elk knooppunt door twee pointers (volgende en vorige), en in zekere zin is het gewoon bedrog.
Ik weet van een manier van bouwen van een binaire zoekboom iterator dat O (h) extra opslagruimte (waar h is de hoogte van de boom) maakt gebruik van met behulp van een stapel te houden van de grens knooppunten te houden om te ontdekken later, maar ik ve verzette codering dit naar voren omdat het geheugengebruik. Ik hoopte dat er een manier om een iterator die enige constante gebruik van de ruimte te bouwen.
Mijn vraag is - is er een manier om een iterator over een binaire zoekboom met de volgende eigenschappen te ontwerpen?
- Elementen worden bezocht in oplopende volgorde (dwz een inorder traversal)
next()enhasNext()query's in O (1) tijd.- Geheugengebruik is O (1)
Om het gemakkelijker te maken, het is prima als je ervan uitgaat dat de boomstructuur niet van vorm verandert tijdens de iteratie (dus geen inserties, deleties, of rotaties), maar het zou wel heel gaaf zijn als er een oplossing die inderdaad dit kon behandelen was.













