speed up redblack put performance

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

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

Loading…
Cancel
Save