17. 2011/4/26 アルゴリズムとデータ構造 7 17
2分探索木からの削除(2)
def delete(BT, key):
parent = None; p = BT.root
while p != None and key != p.key:
parent = p
if key < p.key: p = p.left:
else: p = p.right
if p == None: error(“key not found”) # 削除するキーが見つからない場合
if p.left == None:
r = p.right
else:
r, q = extract_max(p.left); r.left = q; r.right = p.right
if parent == None:
BT.root = r # 根を削除する場合
elif key < parent.key:
parent.left = r
else:
parent.right = r
削除するノー
ドを探す
p.left の最大要素と,そ
れを削除してできた新
しい部分木を返す(後
述)
18. 2011/4/26 アルゴリズムとデータ構造 7 18
2分探索木からの削除(3)
extract_max(n)
部分木 n に含まれる最大要素のノード m と,そのノード m を削除した結果
の更新されたノード n を返す手続き
n は None ではないものとする
def extract_max(n):
parent = None
p = n
while p.right != None:
parent = p
p = p.right
if parent == None:
return p, p.left
else:
parent.right = p.left
return p, n