Předpokládám, že o stromu nevím nic, měl bych jej tak nejprve redukovat a nikoli přestavovat za běhu. Tedy:
Jak na to, mám-li omezenou paměť? Pravděpodobně budu muset při každém kroku prvky umazávat.
Plánuju-li udělat spojový seznam, pak by umazání šlo provést v konstantním (a celkově lineárním) čase; jdu-li doleva (hledám nejmenší vrchol), ten bude určitě list. Druhý nejmenší vrchol bude jeho otec, a zde již mohou nastávat problémy. Předpokládám-li však, že se nějak chytře dokážu dostat "nahoru", mohu se pouze vrátit do otce a přepojit jej.
Tím pádem vždy pouze umazávám vrchol s synem nebo žádným.
Předtím, než daný prvek smažu, jej samozřejmě zapíšu do spojového seznamu.
Jakmile mám daný spojový seznam, musím z něj udělat vyvážený vyhledávací strom. To lze snadno v případě, je-li počet prvků roven (takže třeba prvků), v takovém případě bude prostřední kořenem a zbydou mi dva podstromy, které musím zkontstruovat.
Má-li levý podstrom prvků, pak pravý podstrom bude začínat na -tém prvku spojového seznamu.
Vzhledem k této skutečnosti (pamatuji si, kde začnu dělat nový strom) také nemusím prvky uchovávat, při konstrukci stromu je mohu rovnou mazat.
Tedy např. pro 8 prvků:
…
Při každém takovém volání musím vrátit kořen.
Bohužel, nevím, zdali je akové rekurzivní volání povoleno (pokud s tím přehazuji i prvky), zřejmě by se to nevlezlo do paměti.