Algoritmos em Python

Árvore binária de busca em Python

Uma árvore binária de busca guarda os valores menores na subárvore esquerda e os maiores na direita, então cada comparação descarta metade da árvore restante.

O que é Árvore binária de busca em Python?

Uma árvore binária de busca guarda os valores menores na subárvore esquerda e os maiores na direita, então cada comparação descarta metade da árvore restante.

Construa uma árvore binária de busca em Python: insira valores, procure-os e liste-os em ordem.

Quando usar?

  • Entender algoritmos e estruturas de dados.
  • Observar cada etapa e tratar casos de borda.
  • Comparar tempo de execução e memória.

Veja como funciona

Insira valores para ver onde eles ficam, procure um valor para seguir seu caminho e rode um percurso para ver a ordem de visita.

Código de exemplo

Executar código →
main.py
class Node:
    def __init__(self, value):
        self.value = value
        self.left = None   # smaller values go left
        self.right = None  # larger values go right


def insert(node, value):
    if node is None:
        return Node(value)
    if value < node.value:
        node.left = insert(node.left, value)
    elif value > node.value:
        node.right = insert(node.right, value)
    return node


def contains(node, value):
    # Each comparison discards one whole subtree.
    while node is not None:
        if value == node.value:
            return True
        node = node.left if value < node.value else node.right
    return False


def inorder(node):
    # Left subtree, node, right subtree: visits values in sorted order.
    if node is None:
        return []
    return inorder(node.left) + [node.value] + inorder(node.right)


def height(node):
    if node is None:
        return 0
    return 1 + max(height(node.left), height(node.right))


root = None
for value in [50, 30, 70, 20, 40, 60, 80]:
    root = insert(root, value)

print("inorder:", inorder(root))
print("contains 60:", contains(root, 60))
print("contains 65:", contains(root, 65))
print("height:", height(root))

Saída esperada

inorder: [20, 30, 40, 50, 60, 70, 80]
contains 60: True
contains 65: False
height: 3

Como funciona

insert() desce a partir da raiz e encaixa o valor no lugar certo. contains() segue um único caminho, o que leva O(log n) passos numa árvore balanceada. Um percurso inorder visita esquerda, nó, direita, então os valores saem ordenados.

Altere os valores e execute o programa no compilador Python online CodeUtility sem instalar Python.

Exercícios práticos

Altere as entradas e teste casos de borda antes de usar conjuntos de dados maiores.

  1. Teste entrada vazia, um elemento e duplicados.
  2. Mostre o estado após cada etapa.
  3. Compare o desempenho com outra solução.
Executar no IDE Python →

Pratique com um desafio

Use o conteúdo desta lição para resolver um problema real. Cada desafio roda no navegador, com testes instantâneos e uma revisão por IA.

Todos os desafios