Jag sitter och filar på mina C/C++-kunskaper för tillfället, och arbetar med binära träd och C. Nu är det så att jag skulle behöva en metod för att balansera upp ett träd, och jag kommer ingenvart alls. Någon som kan förklara för mig hur jag bör göra, och kanske bidra med lite psuedokod? :)
Vad jag vet så finns det 2 sätt att balansera trädet, under körning, typ Red-Black tree som är det Javas Tree klasser använder, den andra metoden är att man helt enkelt lägger ner trädet i en sorterad array och sedan skapar det på nytt, då blir det perfekt balanserat.
För Red-Black kan du söka på internet, det finns mycket info om det.
Du kan använda dej av AVL Tree vilket är ett balanserat binärt sökträd. Googla efter AVL tree eller kolla här. Denna sida förklarar lite hur AVL Tree fungerar och den verkar även ha exempelkod. :)
Jag vet, det jag menade var att jag vill fortsätta med det träd jag redan har. Jag har redan skrivit en hel del, och vill inte anpassa mig efter AVL eftersom att det ändå går att lösa. :)
Jag förstår inte hur du menar. Om du inte vill ändra något i din datatyp så använd AVL-träd och räkna ut höjden dynamiskt. Det förstör komplexiteten men det fungerar.
Om du ska använda röd-svarta träd måste du ju lagra färgen på noden på något sätt. Eller har jag missförstått något?
Jag tänkte inte använda mig av Red Black-algoritmen heller, utan skyffla ner allt i en array och sedan sortera ut det på rätt ställen i trädet. På så sätt behöver jag endast skapa nya metoder och funktioner för att få det att fungera. Med AVL behöver jag ändra i mina redan existerande metoder/funktioner, samma med Red Black.