Operação de remoção em BST
A remoção de um elemento em uma árvore de busca binária é uma operação que pode ser feita de diferentes maneiras, dependendo da estrutura dos filhos do nó que será removido.
1. Nó a ser removido é um nó folha
A remoção de um nó folha é a situação mais simples. Basta eliminar o nó da árvore e ajustar o ponteiro do seu nó pai para apontar para NULL
.
Exemplo
Remover o nó 4 da árvore abaixo:
6
/ \
4 8
Aqui, basta ajustar o campo left
do nó 6 para apontar para NULL
:
6
\
8
2. Nó a ser removido possui somente um filho
Se o nó a ser removido tiver apenas um filho, o processo de remoção é feito conectando o nó pai diretamente ao filho do nó removido.
Ou seja, o filho do nó removido assume o lugar do nó na árvore.
Exemplo:
Remover o nó 10 da árvore abaixo:
8
\
10
\
14
Neste caso, o nó 10 tem apenas um filho (nó 14). Para remover 10, basta fazer com que o nó 8 aponte diretamente para 14:
8
\
14
3. O Nó a ser removido possui dois filhos
Quando o nó a ser removido tem dois filhos, a remoção é mais complexa, pois precisamos reorganizar a árvore para manter a propriedade da árvore de busca binária.
A solução é encontrar o nó cuja chave é mais próxima do nó removido, o que pode ser feito de duas maneiras:
- Usar o menor valor da subárvore direita (o sucessor) do nó a ser removido.
- Usar o maior valor da subárvore esquerda (o antecessor).
Geralmente, é mais comum utilizar o sucessor, que é o nó de menor valor na subárvore à direita.
Exemplo:
Remover o nó 3 da árvore abaixo:
5
/ \
3 8
/ \
2 4
Para remover o nó 3, devemos encontrar o sucessor. O menor valor na subárvore à direita de 3 é o nó 4. O nó 4 substitui 3, mantendo a estrutura da árvore:
5
/ \
4 8
/
2