def build_graph(array): size_array = len(array) pos = int(size_array / 2) root = Node(array[pos]) if size_array == 1: return root left = build_graph(array[:pos]) if left: root.add_adjacent(left) if size_array > 2: right = build_graph(array[pos + 1:]) if right: root.add_adjacent(right) return root
def check_bst(root: Node): if not root.adjacents: return True if root.adjacents[0].value > root.value or root.adjacents[ 1].value < root.value: return False return check_bst(root.adjacents[0]) and check_bst(root.adjacents[1]) if __name__ == "__main__": node_a = Node(10) node_b = Node(50) node_c = Node(9) node_d = Node(11) node_e = Node(45) node_f = Node(55) root = Node(30) root.add_adjacent(node_a) # left root.add_adjacent(node_b) # right node_a.add_adjacent(node_c) # left node_a.add_adjacent(node_d) # right node_b.add_adjacent(node_e) # left node_b.add_adjacent(node_f) # right print(check_bst(root))
return False def has_route_dfs(node_a: Node, node_b: Node) -> bool: """DFS is often prefered if we want to visit every node """ if node_a == node_b: return True node_a.visited = True for adjacent in node_a.adjacents: if has_route_bfs(adjacent, node_b): return True return False if __name__ == "__main__": node_a = Node(10) node_b = Node(5) node_c = Node(2) node_d = Node(5) root = Node(30) root.add_adjacent(node_a) root.add_adjacent(node_b) node_a.add_adjacent(node_c) node_a.add_adjacent(node_d) print(has_route_dfs(node_b, node_c))