public object this[IComparable key]
{
get {
return GetData(key);
}
set {
if(key == null)
throw new ArgumentNullException("Key is null");
// traverse tree - find where node belongs
int result = 0;
// create new node
OrderedTreeNode node = new OrderedTreeNode();
OrderedTreeNode temp = rbTree; // grab the rbTree node of the tree
while(temp != sentinelNode) {
// find Parent
node.Parent = temp;
result = key.CompareTo(temp.Key);
if(result == 0) {
lastNodeFound = temp;
temp.Data = value;
return;
}
if(result > 0)
temp = temp.Right;
else
temp = temp.Left;
}
// setup node
node.Key = key;
node.Data = value;
node.Left = sentinelNode;
node.Right = sentinelNode;
// insert node into tree starting at parent's location
if(node.Parent != null) {
result = node.Key.CompareTo(node.Parent.Key);
if(result > 0)
node.Parent.Right = node;
else
node.Parent.Left = node;
}
else
rbTree = node; // first node added
RestoreAfterInsert(node); // restore red-black properities
lastNodeFound = node;
intCount = intCount + 1;
}
}