MCPcopy Create free account
hub / github.com/TheAlgorithms/Go / deleteHelper

Method deleteHelper

structure/tree/rbtree.go:300–350  ·  view source on GitHub ↗
(node *RBNode[T], key T)

Source from the content-addressed store, hash-verified

298}
299
300func (t *RB[T]) deleteHelper(node *RBNode[T], key T) bool {
301 z := t._NIL
302 for node != t._NIL {
303 switch {
304 case node.key == key:
305 z = node
306 fallthrough
307 case node.key <= key:
308 node = node.right
309 case node.key > key:
310 node = node.left
311 }
312 }
313
314 if z == t._NIL {
315 return false
316 }
317
318 var x *RBNode[T]
319 y := z
320 yOriginColor := y.color
321 if z.left == t._NIL {
322 x = z.right
323 t.transplant(z, z.right)
324 } else if z.right == t._NIL {
325 x = z.left
326 t.transplant(z, z.left)
327 } else {
328 y = minimum[T](z.right, t._NIL).(*RBNode[T])
329 yOriginColor = y.color
330 x = y.right
331 if y.parent == z {
332 x.parent = y
333 } else {
334 t.transplant(y, y.right)
335 y.right = z.right
336 y.right.parent = y
337 }
338
339 t.transplant(z, y)
340 y.left = z.left
341 y.left.parent = y
342 y.color = z.color
343 }
344
345 if yOriginColor == Black {
346 t.deleteFix(x)
347 }
348
349 return true
350}
351
352func (t *RB[T]) deleteFix(x *RBNode[T]) {
353 var s *RBNode[T]

Callers 1

DeleteMethod · 0.95

Calls 2

transplantMethod · 0.95
deleteFixMethod · 0.95

Tested by

no test coverage detected