DECMATRIX

Ferramentas Matemáticas

Exercícios Interativos de Árvore AVL

Exercício completo

Construa a árvore inserindo os valores nas posições corretas e faça cada rebalanceamento manualmente. Este exercício tem configurações e contadores próprios.

Configurar ou reiniciar
Configuração do próximo exercício

Prática rápida de rotações

Equilibre uma árvore já montada, com uma ou duas rotações. Depois do acerto, observe a árvore corrigida e escolha Próximo exercício para gerar outro desafio. Esta prática é independente do exercício completo acima.

Equilibre esta árvore

Uma rotação simples

Preparando um desafio de uma rotação…

Quer experimentar livremente? Abra o simulador de Árvore AVL.

Como praticar

Escolha o que quer praticar. Na Prática rápida de rotações, a árvore já está montada: sua tarefa é equilibrá-la. No Exercício completo, abra Configurar ou reiniciar, escolha o modo e de 6 a 20 valores (o padrão é 8) e clique em Começar exercício. Misturado inclui pelo menos dois tipos de caso; os modos LL, RR, LR e RL garantem o caso escolhido, podendo incluir outros.

No exercício completo, leia o valor indicado e use Inserir na raiz para o primeiro nó. Para os demais, percorra a árvore comparando o valor com cada ancestral. Selecione o pai por um clique no nó ou pela lista Selecionar nó e use Inserir à esquerda ou Inserir à direita. A posição precisa estar vazia e respeitar todos os limites do caminho. Uma tentativa incorreta mantém a árvore e o valor atual, com uma explicação do erro.

Depois de cada inserção correta, confira se o exercício pede rebalanceamento. Em Ajuda e dicas, você pode mostrar os fatores de balanceamento e revelar pistas progressivas. Comece no valor recém-inserido, suba pelos pais e encontre o primeiro ancestral cujo fator seja +2 ou −2. O caminho a partir dele identifica LL, RR, LR ou RL; o nome do caso não é a direção do botão de rotação.

Selecione o nó em que a próxima operação deve ocorrer e use Rotacionar à esquerda ou Rotacionar à direita. Cada clique realiza apenas uma rotação simples. Em LR e RL, gire primeiro o filho correspondente e depois o ancestral original: o estado intermediário ainda desbalanceado faz parte da solução. O próximo valor só é liberado quando a ordem BST, as alturas e o balanceamento estiverem corretos. A árvore do aluno nunca se corrige sozinha.

Use o zoom, o deslocamento e Ajustar à tela para inspecionar os nós; a lista permite selecionar mesmo quando um nó está fora do quadro. Os indicadores no rodapé registram acertos, erros, rotações e dicas sem precisar expandir um painel. Ao terminar, confira a pontuação e tente novamente ou gere outro exercício. Na prática rápida, o resultado permanece visível até você escolher Próximo exercício; isso não reinicia o exercício completo.

A posição precisa respeitar todos os ancestrais

Uma árvore binária de busca (BST) não compara cada nó apenas com o pai. Toda a subárvore esquerda de um ancestral contém valores menores que ele; toda a subárvore direita contém valores maiores. Ao descer pela árvore, essas comparações acumulam um intervalo permitido para a nova posição.

Considere 30 na raiz e 20 à esquerda de 30. Se 25 for inserido à direita de 20, ele precisa ser maior que 20 e menor que 30: as duas condições são verdadeiras. O valor 35 também é maior que 20, mas não pode ocupar essa posição, pois continuaria dentro da subárvore esquerda de 30. Para 35, o caminho correto começa à direita de 30.

Na ferramenta, selecionar 20 e usar Inserir à direita só é correto se o valor atual estiver no intervalo 20 < valor < 30. Se a tentativa violar um limite, o feedback aponta o ancestral responsável e preserva a árvore. Refaça o caminho desde a raiz antes de escolher outro pai ou lado; uma rotação posterior não deve ser usada para tentar corrigir uma inserção BST inválida.

Altura e fator de balanceamento

Uma folha tem altura 0; uma subárvore vazia tem altura −1. O fator é altura(esquerda) − altura(direita). Uma AVL válida tem fatores −1, 0 ou +1 em todos os nós. Após inserir, suba até o primeiro ancestral desbalanceado. A árvore do aluno nunca se corrige sozinha.

Por exemplo, um nó com filho esquerdo folha e sem filho direito tem altura 1 e fator 0 − (−1) = +1. Se a subárvore esquerda cresce para altura 1 e a direita continua vazia, o fator passa a 1 − (−1) = +2: é necessário rebalancear.

Encontre o primeiro ancestral desbalanceado

  1. Comece no valor recém-inserido e suba pelos pais.
  2. Em cada nó, compare a altura esquerda com a direita. Fatores −1, 0 e +1 são válidos.
  3. Pare no primeiro nó com fator +2 ou −2. Escolha o caso observando também o fator do filho do lado mais alto.
  4. Execute a rotação simples ou as duas operações da rotação dupla. Só continue a inserção depois de conferir toda a árvore.

LL, RR, LR e RL

  • LL: o peso está à esquerda da esquerda. Rotacione o ancestral desbalanceado à direita.
  • RR: o peso está à direita da direita. Rotacione o ancestral desbalanceado à esquerda.
  • LR: rotacione o filho esquerdo à esquerda e, depois, o ancestral à direita.
  • RL: rotacione o filho direito à direita e, depois, o ancestral à esquerda.

As letras vêm do inglês: L significa left (esquerda) e R significa right (direita). Partindo do primeiro ancestral desbalanceado, a primeira letra indica o lado do filho mais alto; a segunda indica o lado que cresceu dentro desse filho. O nome descreve o caminho do desbalanceamento, não a direção da rotação corretiva. LL é corrigido à direita, RR à esquerda; LR e RL precisam de duas operações. Nos diagramas, o anel tracejado identifica o nó da próxima rotação, também indicado no texto.

Exemplos resolvidos, uma operação por vez

LL: 30, 20, 10

  1. Insira 30 na raiz, 20 à esquerda de 30 e 10 à esquerda de 20. Ao subir de 10, o nó 20 tem fator +1; o primeiro ancestral inválido é 30, com fator +2.
  2. De 30 até o valor inserido, o caminho é esquerda e esquerda: LL. A altura extra está no lado externo, então uma única rotação resolve. Selecione 30 e use Rotacionar à direita, não à esquerda.
  3. O nó 20 sobe para a raiz, 10 continua à esquerda e 30 passa à direita de 20. A ordem 10 < 20 < 30 é preservada e os três fatores ficam em 0. Agora o exercício completo pode liberar o próximo valor.
1. Antes

Próxima ação: rotação à direita no nó 30 (anel tracejado).

302010

Nó 30: filho esquerdo 20; filho direito vazio. Nó 20: filho esquerdo 10; filho direito vazio. Nó 10: filho esquerdo vazio; filho direito vazio.

2. Depois

Árvore equilibrada: raiz 20, filhos 10 e 30. Todos os fatores são 0.

302010

Nó 30: filho esquerdo vazio; filho direito vazio. Nó 20: filho esquerdo 10; filho direito 30. Nó 10: filho esquerdo vazio; filho direito vazio.

RR: 10, 20, 30

  1. Insira 10 na raiz, 20 à direita de 10 e 30 à direita de 20. Subindo de 30, o nó 20 tem fator −1 e o primeiro ancestral desbalanceado é 10, com fator −2.
  2. O caminho desde 10 segue direita e direita: RR. Embora as letras indiquem a direita, a operação corretiva é à esquerda. Selecione 10 e use Rotacionar à esquerda.
  3. O nó 20 vira a raiz, com 10 à esquerda e 30 à direita. Nenhum valor muda nem desaparece; apenas os vínculos são reorganizados. Os três fatores passam a 0.
1. Antes

Próxima ação: rotação à esquerda no nó 10 (anel tracejado).

102030

Nó 10: filho esquerdo vazio; filho direito 20. Nó 20: filho esquerdo vazio; filho direito 30. Nó 30: filho esquerdo vazio; filho direito vazio.

2. Depois

Árvore equilibrada: raiz 20, filhos 10 e 30. Todos os fatores são 0.

102030

Nó 10: filho esquerdo vazio; filho direito vazio. Nó 20: filho esquerdo 10; filho direito 30. Nó 30: filho esquerdo vazio; filho direito vazio.

LR: 30, 10, 20

  1. Insira 30 na raiz, 10 à esquerda de 30 e 20 à direita de 10. Subindo de 20, o nó 10 tem fator −1 e o primeiro ancestral desbalanceado é 30, com fator +2. Desde 30, o caminho é esquerda e direita: LR.
  2. O crescimento está no lado interno. Selecione 10 e use Rotacionar à esquerda. No estado intermediário, 20 passa a ser filho esquerdo de 30 e 10 fica à esquerda de 20. O fator de 30 continua +2: isso é esperado, não um erro da primeira operação.
  3. Selecione o ancestral original 30 e use Rotacionar à direita. Agora 20 é a raiz, com filhos 10 e 30 e fatores 0. Foram duas ações separadas; não tente avançar para a próxima inserção entre elas.
1. Antes

Próxima ação: rotação à esquerda no nó 10 (anel tracejado).

301020

Nó 30: filho esquerdo 10; filho direito vazio. Nó 10: filho esquerdo vazio; filho direito 20. Nó 20: filho esquerdo vazio; filho direito vazio.

2. Após a primeira rotação

Próxima ação: rotação à direita no nó 30 (anel tracejado).

301020

Nó 30: filho esquerdo 20; filho direito vazio. Nó 10: filho esquerdo vazio; filho direito vazio. Nó 20: filho esquerdo 10; filho direito vazio.

3. Depois

Árvore equilibrada: raiz 20, filhos 10 e 30. Todos os fatores são 0.

302010

Nó 30: filho esquerdo vazio; filho direito vazio. Nó 20: filho esquerdo 10; filho direito 30. Nó 10: filho esquerdo vazio; filho direito vazio.

RL: 10, 30, 20

  1. Insira 10 na raiz, 30 à direita de 10 e 20 à esquerda de 30. Subindo de 20, o nó 30 tem fator +1 e o primeiro ancestral desbalanceado é 10, com fator −2. Desde 10, o caminho é direita e esquerda: RL.
  2. Selecione primeiro o filho 30 e use Rotacionar à direita. No estado intermediário, 20 torna-se filho direito de 10 e 30 fica à direita de 20. O fator de 10 ainda é −2, pois falta corrigir o ancestral original.
  3. Selecione 10 e use Rotacionar à esquerda. A raiz final é 20, com 10 à esquerda e 30 à direita; os fatores ficam em 0. O caso é o espelho de LR, com as direções das duas operações invertidas.
1. Antes

Próxima ação: rotação à direita no nó 30 (anel tracejado).

103020

Nó 10: filho esquerdo vazio; filho direito 30. Nó 30: filho esquerdo 20; filho direito vazio. Nó 20: filho esquerdo vazio; filho direito vazio.

2. Após a primeira rotação

Próxima ação: rotação à esquerda no nó 10 (anel tracejado).

103020

Nó 10: filho esquerdo vazio; filho direito 20. Nó 30: filho esquerdo vazio; filho direito vazio. Nó 20: filho esquerdo vazio; filho direito 30.

3. Depois

Árvore equilibrada: raiz 20, filhos 10 e 30. Todos os fatores são 0.

102030

Nó 10: filho esquerdo vazio; filho direito vazio. Nó 20: filho esquerdo 10; filho direito 30. Nó 30: filho esquerdo vazio; filho direito vazio.

Erros comuns e como corrigi-los

  • Comparar só com o pai: confira também os limites dos ancestrais.
  • Girar a raiz por hábito: comece pelo primeiro ancestral desbalanceado, que pode estar dentro da árvore.
  • Confundir LL com giro à esquerda: o nome indica o caminho, e a rotação vai no sentido oposto ao peso externo.
  • Parar depois da primeira operação de LR/RL: confira o ancestral original e execute a segunda rotação.
  • Tentar uma rotação sem o filho necessário: para girar à esquerda é preciso filho direito; para girar à direita, filho esquerdo.

FAQ

Decmatrix - Seu toolkit matemático open-source para cálculos, conversões e mais.
Termos de Uso
Política de Privacidade
Contato: decimatrix25@gmail.com