Byl jsem kódování vytvořit spoustu různých implementacích binární vyhledávací strom v poslední době (AVL, rozevírá, treap) a jsem zvědavý, jestli je to zejména „dobrý“ způsob, jak psát iterátor přetínat tyto struktury. Řešení Použil jsem právě teď je, aby každý uzel v BST ukládání ukazatele na další a předchozí prvků ve stromové struktuře, což snižuje iteraci do standardního připojený seznam iteraci. Nicméně, já nejsem spokojen s touto odpovědí. To zvyšuje využití prostoru každého uzlu pomocí dvou ukazatelů (další a předchozí), a v jistém smyslu je to jen podvod.
Znám způsob, jak budovat binární vyhledávací strom iterátor, který používá O (H) pomocného úložného prostoru (kde h je výška stromu) pomocí stoh sledovat hraničních uzlů, aby prozkoumala později, ale já jsem bránil toto kódování, protože k využití paměti. Doufal jsem, že tam je nějaký způsob, jak vybudovat iterátor, který používá pouze konstantní prostor.
Moje otázka zní - existuje způsob, jak navrhnout iterátor nad binárního vyhledávacího stromu s těmito vlastnostmi?
- Prvky jsou navštěvovány ve vzestupném pořadí (tj nezbytného průchod)
next()ahasNext()spuštění dotazů v O (1) času.- Využití paměti je O (1)
Aby to bylo jednodušší, je to v pořádku, pokud předpokládáme, že ve stromové struktuře se nemění tvar během iteraci (tj žádné inzerce, delece nebo otáčky), ale to by bylo opravdu skvělé, kdyby tam byl řešení, které by skutečně mohla zvládnout.













