「DA:binarysearchtree」の版間の差分
ナビゲーションに移動
検索に移動
(ページの作成:「= 二分探索木 = 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: | ||
# 葉(子なし)の場合 | # 葉(子なし)の場合 | ||
### ここを埋める ### | |||
# 子が一つの場合 | # 子が一つの場合 | ||
### ここを埋める ### | |||
# 子が二つの場合 | # 子が二つの場合 | ||
### ここを埋める ### | |||
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))