修复一些size 计算的错误

This commit is contained in:
huangsimin
2019-04-09 17:26:01 +08:00
parent 9c458a42b8
commit dabe40f49d
3 changed files with 179 additions and 199 deletions

View File

@@ -287,39 +287,41 @@ func (tree *Tree) GetNode(value interface{}) (*Node, bool) {
return nil, false
}
func (tree *Tree) Put(value interface{}) {
tree.size++
node := &Node{value: value}
if tree.size == 1 {
tree.root = node
func (tree *Tree) Put(key interface{}) {
if tree.size == 0 {
tree.root = &Node{value: key}
tree.size++
return
}
for cur, c := tree.root, 0; ; {
c = tree.Compare(value, cur.value)
if c == 0 {
cur.value = value
return
} else if c == -1 {
c = tree.Compare(key, cur.value)
if c == -1 {
if cur.children[0] == nil {
cur.children[0] = node
node.parent = cur
tree.size++
cur.children[0] = &Node{value: key}
cur.children[0].parent = cur
if cur.height == 0 {
tree.fixPutHeight(cur)
}
return
}
cur = cur.children[0]
} else {
} else if c == 1 {
if cur.children[1] == nil {
cur.children[1] = node
node.parent = cur
tree.size++
cur.children[1] = &Node{value: key}
cur.children[1].parent = cur
if cur.height == 0 {
tree.fixPutHeight(cur)
}
return
}
cur = cur.children[1]
} else {
cur.value = key
return
}
}
}