DA:binarysearchtree

提供:classwiki
2025年5月2日 (金) 03:11時点におけるKkamma (トーク | 投稿記録)による版 (→‎二分探索木)
ナビゲーションに移動 検索に移動

二分探索木

def insert(node, key):
    if node is None:
        return {"key": key, "left": None, "right": None}
    if key < node["key"]:
        node["left"] = insert(node["left"], key)
    elif key > node["key"]:
        node["right"] = insert(node["right"], key)
    return node

def search(node, key):
    if node is None:
        return False
    if key == node["key"]:
        return True
    elif key < node["key"]:
        return search(node["left"], key)
    else:
        return search(node["right"], key)

def delete(node, key):
    if node is None:
        return None
    if key < node["key"]:
        node["left"] = delete(node["left"], key)
    elif key > node["key"]:
        node["right"] = delete(node["right"], key)
    else:
        # 葉(子なし)の場合
        ### ここを埋める ###

        # 子が一つの場合
        ### ここを埋める ###

        # 子が二つの場合
        ### ここを埋める ###

    return node

def inorder(node):
    if node is None:
        return []
    return inorder(node["left"]) + [node["key"]] + inorder(node["right"])

# テストコード
tree = None
for value in [8, 3, 10, 1, 6, 14, 4, 7, 13]:
    tree = insert(tree, value)

print("要素を整列して表示:", inorder(tree))
print("Search 6:", search(tree, 6))

tree = delete(tree, 10)
print("要素を整列して表示(10を削除後):", inorder(tree))