Module: Lite::Containers::AvlTree::Delete
- Included in:
- Implementation
- Defined in:
- lib/lite/containers/avl_tree/delete.rb
Instance Method Summary collapse
-
#delete(key, node) ⇒ Object
rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity.
Instance Method Details
#delete(key, node) ⇒ Object
rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/lite/containers/avl_tree/delete.rb', line 7 def delete(key, node) # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity return [nil, nil] if node.nil? case compare(key, node.key) when -1 deleted, node.left = delete(key, node.left) [deleted, rebalance(node)] when 0 if node.left.nil? || node.right.nil? new_root = node.left.nil? ? node.right : node.left [node, new_root] else new_root = leftmost_child(node.right) _, new_root.right = delete(new_root.key, node.right) new_root.left = node.left [node, rebalance(new_root)] end when 1 deleted, node.right = delete(key, node.right) [deleted, rebalance(node)] end end |