Árvore binária de busca (BST)

Comece com uma árvore binária de busca aleatória e insira, busque ou exclua valores passo a passo, com sua forma em array e o código C++ destacado.

Tudo é simulado neste navegador; nada é enviado a nenhum servidor.

Sem passos

Sem passos

Árvore binária de busca

Índice no array

60[0]45[1]85[2]68[5]21[3]55[4]32[8]

Forma em array

Os filhos do índice i estão em 2i+1 e 2i+2.

  • Sem relação
  • Já percorrido
  • Sendo comparado
  • Encontrado
  • Novo
  • A excluir
  • Sucessor

Sem passos

Código

#include <iostream>
using namespace std;
class Node { // Um nó guarda seu valor e ponteiros para seus dois filhos
private: // Atributos privados: só os métodos acessam
int value;
Node* left;
Node* right;
public:
Node(int v) : value(v), left(nullptr), right(nullptr) {}
int getValue() const { return value; }
Node* getLeft() const { return left; }
Node* getRight() const { return right; }
void setValue(int v) { value = v; }
void setLeft(Node* n) { left = n; }
void setRight(Node* n) { right = n; }
};
Node* insert(Node* root, int v) { // Insere v na árvore de busca e devolve a raiz
if (root == nullptr) // Posição vazia: o novo nó fica aqui
return new Node(v); // Cria o novo nó
if (v < root->getValue()) // Valores menores vão para a esquerda e maiores para a direita
root->setLeft(insert(root->getLeft(), v)); // Desce pela subárvore esquerda
else
root->setRight(insert(root->getRight(), v)); // Desce pela subárvore direita
return root;
}
int main() {
Node* root = buildTree(); // A árvore exibida, já construída
root = insert(root, v); // Primeira chamada, a partir de main
return 0; // Fim da operação
}

Esta ferramenta parte de uma árvore binária de busca (BST) aleatória e permite modificá-la manualmente: digite um valor de 1 a 99 e clique em Inserir, Buscar ou Remover. Cada operação é animada passo a passo na árvore, com nós coloridos conforme seu papel: sendo comparado, já percorrido, novo, a remover ou sucessor. Abaixo você vê a mesma árvore como um vetor, com os filhos do índice i em 2i+1 e 2i+2, e o código C++ destaca a linha em execução. Você pode mudar o tamanho de 3 a 15 nós, gerar outra árvore e voltar a qualquer passo. Tudo é simulado no seu navegador.

Como usar

  1. Defina o tamanho da árvore com o controle deslizante ou clique em Gerar nova árvore para mudar o ponto de partida.
  2. Digite um valor de 1 a 99 e clique em Inserir, Buscar ou Remover; a animação começa sozinha.
  3. Avance ou volte com os botões de passo anterior e seguinte, ou clique em Reproduzir e altere a velocidade.
  4. Observe os nós coloridos, a forma de vetor da árvore e a linha de código C++ destacada.

Perguntas frequentes

O que é uma árvore binária de busca e que propriedade ela mantém?
É uma árvore binária em que cada nó tem no máximo dois filhos e todos os valores da subárvore esquerda são menores que o valor do nó, enquanto todos os da direita são maiores. Graças a essa propriedade, metade do caminho restante pode ser descartada a cada comparação.
Como funcionam a inserção e a busca em uma BST e quanto custam?
Ambas começam na raiz e comparam o valor com cada nó: se for menor vão para a esquerda e, se for maior, para a direita. A busca termina ao encontrar o valor ou chegar a nullptr; a inserção cria o novo nó nessa posição vazia. O custo é proporcional à altura da árvore: logarítmico quando ela está balanceada e linear quando é uma cadeia.
Quais são os três casos de remoção e por que se usa o sucessor em ordem?
Se o nó é uma folha, ele é simplesmente removido; se tem um filho, esse filho ocupa seu lugar; se tem dois, o valor do sucessor em ordem, o menor da subárvore direita, é copiado para ele e o nó do sucessor é removido. O sucessor é o próximo valor em ordem, então se encaixa nessa posição sem quebrar a propriedade da BST e, como não tem filho esquerdo, sua remoção é um dos casos fáceis.
Como uma árvore é armazenada em um vetor e por que há lacunas?
No formato de heap: a raiz fica no índice 0 e os filhos do índice i em 2i+1 e 2i+2. Se um nó não tem um filho, essa posição fica vazia, e quanto mais desbalanceada a árvore, mais lacunas aparecem, porque os índices crescem com a profundidade.

Ferramentas relacionadas