Hvordan kan du konvertere Binary Tre til binært søketre med O (1) ekstra plass?
Binary treet til binært søketre (BST)
Konvertering en uordnet binært tre inn i et ordnet binært søketre er trivielt, men litt vanskeligere å gjøre raskt.
Her er en naiv implementering som bør tilfredsstille dine kriterier, vil jeg ikke beskrive den faktiske skritt å ta, bare den generelle algoritmen.
- Grab en tilfeldig løvnode fra din eksisterende treet
- Fjerne koblingen bladnoden fra din eksisterende treet
- Gjør noden roten av nye binært søketre
- Grab en annen tilfeldig løvnode fra din eksisterende treet
- Oppheve denne koblingen node fra din eksisterende treet
- Finn riktig sted for, og koble til noden, inn i den nye binært søketre
- Gjenta trinn 4-6 til det opprinnelige treet er tom
Du bør kreve bare noen få variabler, som den overordnede av bladnoden du frakobling (med mindre nodene har foreldre-lenker), rotnoden av det nye treet, og et par midlertidige variabler, alt innen din O (1 ) plass kriterier.
Dette vil ikke gi en optimal binært søketre. For at du må enten sortere nodene før du legger dem, og legge dem i riktig rekkefølge, eller bruke en balanse binært søketre, som en rød-svart tre eller en spriker tre.
Konvertere Binary Tre til en dobbeltlenket liste-kan gjøres inplace i O (n) Deretter sortere det ved hjelp av flettesortering, nlogn konvertere listen tilbake til et tre - O (n)
Enkelt nlogn løsning.













