speed up redblack put performance

pull/56/head
Benjamin Scher Purcell 9 years ago
parent f6c17b5248
commit 08df807efe

@ -62,9 +62,10 @@ func NewWithStringComparator() *Tree {
// Put inserts node into the tree. // Put inserts node into the tree.
// Key should adhere to the comparator's type assertion, otherwise method panics. // Key should adhere to the comparator's type assertion, otherwise method panics.
func (tree *Tree) Put(key interface{}, value interface{}) { func (tree *Tree) Put(key interface{}, value interface{}) {
insertedNode := &Node{Key: key, Value: value, color: red} var insertedNode *Node
if tree.Root == nil { if tree.Root == nil {
tree.Root = insertedNode tree.Root = &Node{Key: key, Value: value, color: red}
insertedNode = tree.Root
} else { } else {
node := tree.Root node := tree.Root
loop := true loop := true
@ -77,14 +78,16 @@ func (tree *Tree) Put(key interface{}, value interface{}) {
return return
case compare < 0: case compare < 0:
if node.Left == nil { if node.Left == nil {
node.Left = insertedNode node.Left = &Node{Key: key, Value: value, color: red}
insertedNode = node.Left
loop = false loop = false
} else { } else {
node = node.Left node = node.Left
} }
case compare > 0: case compare > 0:
if node.Right == nil { if node.Right == nil {
node.Right = insertedNode node.Right = &Node{Key: key, Value: value, color: red}
insertedNode = node.Right
loop = false loop = false
} else { } else {
node = node.Right node = node.Right

Loading…
Cancel
Save