Pular para o conteúdo

Algoritmos e estruturas de dados · Estruturas de dados · 6 min de leitura

Árvores e árvore binária de busca (BST)

Menores à esquerda, maiores à direita: a BST busca em O(log n) quando está equilibrada — e degenera em O(n) se você inserir em ordem. Percursos e árvores balanceadas.

8 → 3: 6 < 86 < 813 → 6: 6 > 36 > 328 → 103 → 18 — raiz8raiz331010116 — achou6achou

Arraste para o lado para ver o diagrama inteiro.

A cada nó a busca descarta um lado inteiro: 6 é menor que 8 (vai à esquerda) e maior que 3 (vai à direita). Dois passos para achar.

A regra da BST

Em cada nó, tudo à esquerda é menor e tudo à direita é maior. Buscar, inserir e remover descem um caminho da raiz até uma folha: o custo é a altura da árvore. Equilibrada, a altura é cerca de log₂ n — um milhão de nós em uns 20 níveis.

Quando degenera

Inserir 1, 2, 3, 4… numa BST simples gera uma "árvore" que é uma lista torta: altura n, busca O(n). Por isso as bibliotecas usam árvores auto-balanceadas (rubro-negra no TreeMap do Java, AVL, B-trees nos índices dos bancos de dados).

Percursos

  • Em ordem (esquerda, nó, direita): devolve os valores ordenados.
  • Pré-ordem (nó primeiro): copiar ou serializar a árvore.
  • Pós-ordem (nó por último): apagar ou calcular tamanhos de pastas.
  • Por níveis: busca em largura com uma fila.

No código

✓ ExemploSwift
final class No {
    let valor: Int
    var esq: No?, dir: No?
    init(_ v: Int) { valor = v }
}

func inserir(_ raiz: No?, _ v: Int) -> No {
    guard let r = raiz else { return No(v) }
    if v < r.valor { r.esq = inserir(r.esq, v) } else { r.dir = inserir(r.dir, v) }
    return r
}

func contem(_ raiz: No?, _ v: Int) -> Bool {
    var atual = raiz
    while let n = atual {
        if v == n.valor { return true }
        atual = v < n.valor ? n.esq : n.dir // descarta metade
    }
    return false
}

A busca é iterativa (sem estourar a pilha numa árvore degenerada); a inserção recursiva é mais curta. Em produção, prefira uma estrutura balanceada pronta.

Em resumo

Exercícios

Responda e confira na hora. Complexidades valem com ou sem espaços, como O(n log n).

  1. Insira 8, 3, 10, 1 e 6 (nessa ordem) numa BST vazia. Qual é a raiz?

    Ver a solução

    Resposta: 8. O primeiro valor inserido vira a raiz e nunca sai de lá numa BST simples.

  2. Qual o percurso em ordem dessa árvore? Escreva os números separados por vírgula.

    Ver a solução

    Resposta: 1, 3, 6, 8, 10. Em ordem visita esquerda, nó, direita — o resultado sai ordenado.

  3. Inserindo 1, 2, 3, …, n em ordem numa BST simples, qual a complexidade de uma busca?

    Ver a solução

    Resposta: O(n). Cada valor vira filho direito do anterior: a árvore tem altura n, como uma lista.

Perguntar à IA

Monte um prompt pronto sobre Árvores e árvore binária de busca (BST) na sua linguagem e no seu caso, e abra num chat gratuito.

ChatGPT Claude Perplexity

O prompt vai para o site que você escolher. Não cole senhas, tokens nem dados reais de clientes. Para Gemini e outros, copie e cole.

Referências

Continue aprendendo

Todos os temas de algoritmos e estruturas de dados →