Zu 1.
Stimmt, das könnt ich noch einbauen, wird auch nicht so schwer sein.
Zu 2.
Ich glaub da verwechselst du was. Ein RBTree ansich speichert einfach nur Werte ab und vergleicht diese, benutzt also keine Key/Wert-Paare (genauso wie der AVL-Baum ja auch, auf den du im anderen Thread verwiesen hast). Ich weiß, dass es z.b. in Java auch eine Klasse TreeMap gibt, die mit Rot-Schwarz-Bäumen arbeitet. Aber da ist ja schon der Name Map drin. RBTree ist einfach nur eine Set.
Allerdings kann man sie dennoch als Map benutzen. Man muss sich halt sowas basteln:
Code: Alles auswählen
Structure Pair
key.s
*value
EndStructure
Procedure NewPair(key.s, *value)
Protected *pair.Pair
*pair = AllocateMemory(SizeOf(Pair))
*pair\key = key
*pair\value = *value
ProcedureReturn *pair
EndProcedure
Procedure ComparePair(*pairA.Pair, *pairB.Pair)
ProcedureReturn CompareMemoryString(@*pairA\key, @*pairB\key)
EndProcedure
Define *this.RBTree
Define *pair.Pair
Define *it.Iterator
*this = NewRBTree(@ComparePair())
*this\insert(NewPair("FR", @"France"))
*this\insert(NewPair("UK", @"United Kingdom"))
*this\insert(NewPair("GE", @"Germany"))
*it = *this\iterator()
While (*it\hasNext())
*pair = *it\nextEl()
Debug *pair\key + ", " + PeekS(*pair\value)
Wend
Die Struktur Pair kannst du natürlich nach deinen Bedürfnissen anpassen. Ist nur wichtig, dass die Funktion 'ComparePair' weiterhin nur die Key's vergleicht. Aber selbst ein anderer Typ für die Key's ist denkbar. Ist halt so viel flexibler.
lg Kevin