-
削除操作の基本的なアプローチ:
- 削除するノードが葉ノードである場合、単純にそのノードを削除します。
- 削除するノードが子ノードを1つだけ持つ場合、その子ノードを削除するノードの位置に置き換えます。
- 削除するノードが子ノードを2つ持つ場合、以下のアルゴリズムを使用します。
-
削除操作の手順:
- 削除するノードの右部分木の最小値(または左部分木の最大値)を見つけます。これは、削除するノードの次に大きい(または小さい)値を持つノードです。
- 上記で見つけたノードを削除するノードの位置に置き換えます。
- 上記で見つけたノードの元の位置を削除します。
-
削除操作のコード例(Python):
class Node:
def __init__(self, value):
self.value = value
self.left = None
self.right = None
def delete_node(root, value):
if root is None:
return root
if value < root.value:
root.left = delete_node(root.left, value)
elif value > root.value:
root.right = delete_node(root.right, value)
else:
if root.left is None:
return root.right
elif root.right is None:
return root.left
min_value = find_min_value(root.right)
root.value = min_value
root.right = delete_node(root.right, min_value)
return root
def find_min_value(node):
current = node
while current.left is not None:
current = current.left
return current.value
上記のコード例では、BST内のノードを削除するための再帰的なアプローチが示されています。削除操作の手順に従って、削除するノードを適切に置き換え、木を再構築します。