class Node: def __init__(self, value): self.value = value self.left = None # 左の子(小さい値) self.right = None # 右の子(大きい値) class BinarySearchTree: def __init__(self): self.root = None def insert(self, value): """値を適切な位置に挿入する""" if self.root is None: self.root = Node(value) else: self._insert_recursive(self.root, value) def _insert_recursive(self, node, value): if value < node.value: if node.left is None: node.left = Node(value) else: self._insert_recursive(node.left, value) else: if node.right is None: node.right = Node(value) else: self._insert_recursive(node.right, value) def search(self, value): """値が存在するか探索する""" return self._search_recursive(self.root, value) def _search_recursive(self, node, value): if node is None: return False if node.value == value: return True elif value < node.value: return self._search_recursive(node.left, value) else: return self._search_recursive(node.right, value) # --- 実行テスト --- bst = BinarySearchTree() # 画像のデータを順番に挿入(ルートの8から) nodes = [8, 3, 10, 1, 6, 14, 4, 7, 13] for n in nodes: bst.insert(n) print(bst.search(7)) # 結果: True (存在する) print(bst.search(20)) # 結果: False (存在しない)