「DA:binarysearchtree」の版間の差分

提供:classwiki
ナビゲーションに移動 検索に移動
(ページの作成:「= 二分探索木 = 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…」)
 
29行目: 29行目:
     else:
     else:
         # 葉(子なし)の場合
         # 葉(子なし)の場合
         if node["left"] is None and node["right"] is None:
         ### ここを埋める ###
            return None
         # 子が一つの場合
         # 子が一つの場合
         if node["left"] is None:
         ### ここを埋める ###
            return node["right"]
        if node["right"] is None:
            return node["left"]
         # 子が二つの場合
         # 子が二つの場合
         successor = node["right"]
         ### ここを埋める ###
        while successor["left"]:
            successor = successor["left"]
        node["key"] = successor["key"]
        node["right"] = delete(node["right"], successor["key"])
     return node
     return node
   
   

2025年5月2日 (金) 03:11時点における版

二分探索木

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))