Binary search tree: remove: Difference between revisions

From Algowiki
Jump to navigation Jump to search
No edit summary
No edit summary
Line 1: Line 1:
== General Information ==
'''Algorithmic Problem:''' [[Sorted Sequence:remove]]
'''Type of algorithm:''' loop
'''Auxiliary data:'''  A pointer '''''p''''' of type "pointer to binary search tree node".
== Abstract view ==
'''Invariant''' After <math>i \geq 0</math> interations:
# The pointer '''''p''''' points to a tree node '''''v''''' on height level '''''i'''''.
# The key '''''K''''' is in [[Directed tree|range]] of '''''p''''', but <math>p.key \neq K</math>.
'''Variant:''' '''''i''''' increased by '''''1'''''.
'''Break Condition:''' One of the following two conditions is fulfilled:
# It is <math>K < p.key</math> and either <math>p.left = void</math> or <math>p.left.key = K</math>.
# It is <math>K > p.key</math> and either <math>p.right = void</math> or <math>p.right.key = K</math>.
== Induction basis==
== Induction step==
== Complexity==
== Implementation ==
TREE-DELETE(T,z)
TREE-DELETE(T,z)
:if left[z] = NULL or right[z] = NULL
:if left[z] = NULL or right[z] = NULL

Revision as of 20:13, 23 September 2014

General Information

Algorithmic Problem: Sorted Sequence:remove

Type of algorithm: loop

Auxiliary data: A pointer p of type "pointer to binary search tree node".

Abstract view

Invariant After [math]\displaystyle{ i \geq 0 }[/math] interations:

  1. The pointer p points to a tree node v on height level i.
  2. The key K is in range of p, but [math]\displaystyle{ p.key \neq K }[/math].

Variant: i increased by 1.

Break Condition: One of the following two conditions is fulfilled:

  1. It is [math]\displaystyle{ K \lt p.key }[/math] and either [math]\displaystyle{ p.left = void }[/math] or [math]\displaystyle{ p.left.key = K }[/math].
  2. It is [math]\displaystyle{ K \gt p.key }[/math] and either [math]\displaystyle{ p.right = void }[/math] or [math]\displaystyle{ p.right.key = K }[/math].

Induction basis

Induction step

Complexity

Implementation

TREE-DELETE(T,z)

if left[z] = NULL or right[z] = NULL
then y = z
else y = TREE-SUCCESSOR(z)
if left[y] ≠ NULL
then x = left[y]
else x = right[y]
if x ≠ NULL
then p[x] = p [y]
if p[y] = NULL
then root[T] = x
else if y = left[p[y]]
then left[p[y]] = x
else right[p[y]] = x
if y ≠ z
then key[z] = key[y]
copy y's satellite data into z
return y