DrRacket Mazání kořen strom binárního vyhledávání

hlasů
1

Upozorňujeme, že se domácí úkoly! -> Nejsem hledali příklady přímých kódu, ale některé jemné masírování mého uvažování ...

Byl jsem požádán, aby napsat funkci, která odstraní kořen binárního vyhledávacího stromu tím, že dělá tři věci: i) rotační stromu vpravo ii) odstranění kořen pravého podstromu (což byl původní BST kořen) iii) přestavba BST s novým kořenem (který byl levý původního stromu) a příslušné přestaveb synů tohoto uzlu ... Zde je to, co mám:

    (define (rm-root my-bst)
      (list (key (rot-r my-bst)) 
            (left (rot-r my-bst)) 
            (append (right (right (rot-r my-bst))) 
                    (left (right (rot-r my-bst))))))

Což je všechno skvělé, očekávat, že nebude znovu sestavit strom s dětmi z uzlu, který byl „povýšen“ do kořenového uzlu. Může mi někdo pomoci přemýšlet o tom, jak bych měl jít o implementaci, že? Měl bych zmínit, že jsme definovali BST, jak seznamy a že funkce rot-r otáčí BST doprava. Děkuji.

Položena 12/11/2011 v 01:07
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
1

No, nejsem si jistý, že to bude užitečné, 12 dní poté, co tato otázka byla položena, ale tady jde.

Aby bylo jasno, Hádám, že datová struktura je ve tvaru (seznam klávesa vlevo, vpravo), kde vlevo a vpravo jsou také stromy (nebo prázdné, ale to je nepodstatné, aby toto). Je-li tomu tak není, bude třeba objasnit, že.

Jedním z problémů v kódu je, že nechcete, aby se přímo připojit dva seznamy, které máte ve prospěch práva. Chcete-li vytvořit seznam s klíčem jednoho z těch, a pak doleva a doprava. Když jsem to četl správně, levý funkce by měla vrátit na strom, a proto by měly fungovat dobře.

Chtěl bych zkontrolovat realizaci rot-R, kdybych tě tak, že se zdá být hlavním možnost věcí špatně.

Odpovězeno 23/11/2011 v 07:33
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more