Method: BiDimensionalTree#delete_node

Defined in:
lib/bi-dimensional-access.rb

#delete_node(x, y) ⇒ Object

Delete a selected node from the tree



141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
# File 'lib/bi-dimensional-access.rb', line 141

def delete_node(x, y)
  node = search_node(x, y)
  nodes = get_nodes_horiz([])
  if nodes.include? node
    nodes.delete(node)
    @root = nodes[nodes.length / 2]
    @root.west = nil
    @root.east = nil

    @root.west = new_balance_nodes_horiz(nodes[0..(nodes.length / 2) - 1])
    @root.east = new_balance_nodes_horiz(nodes[(nodes.length / 2) + 1..-1])
  else
    nodes = get_column(node)
    nodes.delete(node)
    middle = nodes[nodes.length / 2]
    middle.south = nil
    middle.north = nil

    middle.south = new_balance_nodes_vert(nodes[0..(nodes.length / 2) - 1])
    middle.north = new_balance_nodes_vert(nodes[(nodes.length / 2) + 1..-1])
  end
end