9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
# File 'lib/lite/containers/avl_tree/insert.rb', line 9
def insert(node, key, value, merge, factory)
return true, factory.instance(key, value) if node.nil?
case compare(key, node.key)
when -1
increment, node.left = insert(node.left, key, value, merge, factory)
[increment, rebalance(node)]
when 0
node.value = merge.merge(node.value, value)
[false, node]
when 1
increment, node.right = insert(node.right, key, value, merge, factory)
[increment, rebalance(node)]
end
end
|