Hoe kun je converteren Binary Tree naar Binary Search Boom met O (1) extra ruimte?
Binaire boom naar Binary Search Tree (BST)
Het omzetten van een ongeordende binaire boom in een geordende binaire zoekboom is triviaal, maar een beetje moeilijker om snel te doen.
Hier is een naïeve implementatie die uw criteria moet voldoen, zal ik niet de werkelijke stappen te nemen, alleen de algemene algoritme te beschrijven.
- Pak een willekeurig blad knooppunt van uw bestaande boom
- Ontkoppelen het blad knooppunt van uw bestaande boom
- Maak het knooppunt de wortel van uw nieuwe binaire zoekboom
- Pak een ander willekeurig blad knooppunt van uw bestaande boom
- Ontkoppelen dat knooppunt van uw bestaande boom
- Vind de juiste plek voor, en koppelen het knooppunt, in uw nieuwe binaire zoekboom
- Herhaal stap 4-6 totdat de oorspronkelijke boom is leeg
Je moet alleen een aantal variabelen nodig, net als de ouder van het blad knooppunt u ontkoppelen (tenzij de knooppunten ouder-banden), de wortel knooppunt van de nieuwe boom, en een paar tijdelijke variabelen, allemaal binnen uw O (1 ) ruimte criteria.
Dit zal niet tot een optimale binaire zoekboom. Daarvoor moet je ofwel sorteren knooppunten voordat u ze toevoegt, en toe te voegen in de juiste volgorde, of gebruik een balancing binaire zoekboom, zoals een rood-zwarte boom of een splayboom.
Zet Binary Tree aan een dubbel verbonden lijst-kan inplace worden gedaan in O (n) Dan soort gebruik samenvoegen soort, nlogn terug te zetten in de lijst om een boom - O (n)
Simple nlogn oplossing.













