Пример #1
0
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
Пример #2
0

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))
Пример #3
0
    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))