DrRacket verwijderen wortel van een binaire zoekboom

stemmen
1

Let op: dit zijn huistaken! -> Ik ben niet op zoek naar directe codevoorbeelden, maar eerder een aantal zachte masseren van mijn redenering ...

Ik ben gevraagd om een ​​functie die de wortel van een binaire zoekboom verwijdert door het doen van drie dingen te schrijven: i) de boom te draaien naar rechts ii) het verwijderen van de wortel van de rechter deelboom (Wat was de oorspronkelijke bst root) iii) wederopbouw de bst met de nieuwe root (die links van de oorspronkelijke boom was) en de juiste herschikkingen van de kinderen van dat knooppunt ... Hier is wat ik heb:

    (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))))))

Dat is allemaal geweldig, verwachten voor dat het niet de boom komt weer op te bouwen met de kinderen van het knooppunt dat was gepromoveerd naar de root node. Kan iemand me helpen na te denken over hoe ik moet gaan over de implementatie van dat? Ik moet zeggen dat we Bst als lijsten en dat de functie rot-r draait de bst naar rechts hebt gedefinieerd. Dank je.

De vraag is gesteld op 12/11/2011 om 01:07
bron van user
In andere talen...                            


1 antwoorden

stemmen
1

Nou, ik ben niet zeker dat dit nuttig zal 12 dagen na de vraag werd gesteld, maar hier gaat.

Voor alle duidelijkheid, ik gok dat de gegevensstructuur van de vorm (lijst naar links rechts), waarbij links en rechts zijn ook bomen (of leeg, maar dat is niet relevant voor deze). Als dit niet het geval is, zou een verduidelijking van die nodig zijn.

Een probleem in de code is dat je niet wilt dat de twee lijsten die u hebben samen voor de rechter rechtstreeks te voegen. U wilt een lijst met de sleutel van een van deze, en dan de links en rechts te maken. Als ik dit juist aan het lezen ben, moet de linker functie een boom terug te keren en daarom zou moeten werken.

Ik zou de uitvoering van de rot-r controleren als ik jou was als dat lijkt de belangrijkste mogelijkheid om dingen fout gaan zijn.

antwoordde op 23/11/2011 om 07:33
bron van user

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