Também conhecidas como Árvores AVL
   Uma árvore é considerada AVL se, e somente
    se, para cada um de seus nós, as alturas das
    sub-árvores à direita e à esquerda forem iguais,
    ou difiram em apenas uma unidade.
   if ((Hd – He) < 2) { É AVL }
   if ((Hd – He) >= 2) { NÃO É AVL }
   Foi a primeira estrutura de dados a oferecer operações de inserção,
    remoção e busca em tempo logaritmo, ou seja, é um algoritmo
    muito rápido.

   Em uma árvore desbalanceada de 10.000 nós, são necessárias
    5.000 comparações para efetuar uma busca, já numa árvore AVL,
    com o mesmo número de nós, essa média baixa para 14
    comparações.

   Devemos sempre tentar manter o custo de acesso o menor
    possível, e o algoritmo da árvore avl busca exatamente isso,
    deixando a árvore sempre com a menor altura possível.
   Foi a primeira estrutura de dados a oferecer operações de inserção,
    remoção e busca em tempo logaritmo, ou seja, é um algoritmo
    muito rápido.

   Em uma árvore desbalanceada de 10.000 nós, são necessárias
    5.000 comparações para efetuar uma busca, já numa árvore AVL,
    com o mesmo número de nós, essa média baixa para 14
    comparações.

   Devemos sempre tentar manter o custo de acesso o menor
    possível, e o algoritmo da árvore AVL busca exatamente isso,
    deixando a árvore sempre com a menor altura possível.
   Para cada nó, defini-se um fator de balanceamento
    (FatBal), que deve ser -1, 0 ou 1. Ele é o responsável
    por avisar que a árvore está desbalanceada.

   FatBal = altura (sub-árvore direita) – altura (sub-árvore esquerda)

   FatBal = -1, quando a sub-árvore da esquerda é um nível mais alto
    que a direita.

   FatBal = 0, quando as duas sub-árvores tem a mesma altura.

   FatBal = 1, quando a sub-árvore da direita é um nível mais alto que
    a esquerda.
                     Toda folha tem FB = 0
   Quando inserimos um novo registro na árvore, ou removemos um
    registro já existente.

   Esta inserção/remoção pode ou não alterar as propriedades de
    balanceamento.

   Caso a inserção/remoção desse novo registro não viole nenhuma
    propriedade de balanceamento, podemos continuar
    inserindo/removendo registros.

   Se a inserção/remoção afetar as propriedades de balanceamento,
    devemos restaurar o balanço da árvore. Esta restauração é
    efetuada através de Rotações na árvore.
   Rotação simples à esquerda
   Rotação simples à direita
   Rotação dupla à esquerda




       (rotação simples à direita + rotação simples à esquerda)
   Rotação dupla à direita




       (rotação simples à esquerda + rotação simples à direita)
   Dicas

    a) Para identificar quando uma rotação é simples ou
    dupla deve-se observar os sinais do FB:
        - Se o sinal for igual, a rotação é simples
        - Se o sinal for diferente, a rotação é dupla

    b) Se FB for positivo (+), a rotação é para à esquerda

    c) Se FB for negativo (-), a rotação é para à direita
   Suponha que inserimos os números 50, 40 e 30 em
    uma árvore. Obteremos então:
                          A inserção produziu um
                           desbalanceamento.
                           Neste caso, como os sinais dos FB são os
                           mesmos, significa que precisamos fazer
                           apenas uma ROTAÇÃO SIMPLES à
                           direita no nó com FB -2.
                           No caso simétrico (nó com FB 2) faríamos
                           uma rotação simples à esquerda.
   Após a rotação simples teremos:




   Agora a árvore está balanceada.
   Como podemos observar, a árvore está balanceada
    pelos FB de cada nó.

   São dois os possíveis casos de desbalanceamento.
   Ao inserir o número 5 na árvore, teremos a seguinte
    árvore:




       O nó 8 fica com o FB -2 e tem um filho com FB +1. Neste caso para manter o
        balanceamento devemos aplicar duas rotações, também denominada ROTAÇÃO
        DUPLA.
                           Primeiro rotaciona-se o nó com FB 1 para a esquerda.
   Logo rotaciona-se o nó que possuía FB -2 na direção
    oposta, nesse caso a direita.
   Os FB dos nós voltaram a ficar dentro do esperado das árvores AVL.

   O caso simétrico ao explicado acima acontece com os sinais de FB
    trocados, ou seja, um nó com FB +2 com um filho com FB -1. Também
    utilizaríamos uma rotação dupla, mas nos sentidos contrários, ou seja, o
    nó com FB -1 seria rotacionado para a direita e o nó com FB +2 seria
    rotacionado para a esquerda.

Árvores binárias balanceadas

  • 1.
  • 2.
    Uma árvore é considerada AVL se, e somente se, para cada um de seus nós, as alturas das sub-árvores à direita e à esquerda forem iguais, ou difiram em apenas uma unidade.
  • 3.
    if ((Hd – He) < 2) { É AVL }
  • 4.
    if ((Hd – He) >= 2) { NÃO É AVL }
  • 5.
    Foi a primeira estrutura de dados a oferecer operações de inserção, remoção e busca em tempo logaritmo, ou seja, é um algoritmo muito rápido.  Em uma árvore desbalanceada de 10.000 nós, são necessárias 5.000 comparações para efetuar uma busca, já numa árvore AVL, com o mesmo número de nós, essa média baixa para 14 comparações.  Devemos sempre tentar manter o custo de acesso o menor possível, e o algoritmo da árvore avl busca exatamente isso, deixando a árvore sempre com a menor altura possível.
  • 6.
    Foi a primeira estrutura de dados a oferecer operações de inserção, remoção e busca em tempo logaritmo, ou seja, é um algoritmo muito rápido.  Em uma árvore desbalanceada de 10.000 nós, são necessárias 5.000 comparações para efetuar uma busca, já numa árvore AVL, com o mesmo número de nós, essa média baixa para 14 comparações.  Devemos sempre tentar manter o custo de acesso o menor possível, e o algoritmo da árvore AVL busca exatamente isso, deixando a árvore sempre com a menor altura possível.
  • 7.
    Para cada nó, defini-se um fator de balanceamento (FatBal), que deve ser -1, 0 ou 1. Ele é o responsável por avisar que a árvore está desbalanceada.  FatBal = altura (sub-árvore direita) – altura (sub-árvore esquerda)  FatBal = -1, quando a sub-árvore da esquerda é um nível mais alto que a direita.  FatBal = 0, quando as duas sub-árvores tem a mesma altura.  FatBal = 1, quando a sub-árvore da direita é um nível mais alto que a esquerda.  Toda folha tem FB = 0
  • 8.
    Quando inserimos um novo registro na árvore, ou removemos um registro já existente.  Esta inserção/remoção pode ou não alterar as propriedades de balanceamento.  Caso a inserção/remoção desse novo registro não viole nenhuma propriedade de balanceamento, podemos continuar inserindo/removendo registros.  Se a inserção/remoção afetar as propriedades de balanceamento, devemos restaurar o balanço da árvore. Esta restauração é efetuada através de Rotações na árvore.
  • 9.
    Rotação simples à esquerda
  • 10.
    Rotação simples à direita
  • 11.
    Rotação dupla à esquerda (rotação simples à direita + rotação simples à esquerda)
  • 12.
    Rotação dupla à direita (rotação simples à esquerda + rotação simples à direita)
  • 13.
    Dicas a) Para identificar quando uma rotação é simples ou dupla deve-se observar os sinais do FB: - Se o sinal for igual, a rotação é simples - Se o sinal for diferente, a rotação é dupla b) Se FB for positivo (+), a rotação é para à esquerda c) Se FB for negativo (-), a rotação é para à direita
  • 14.
    Suponha que inserimos os números 50, 40 e 30 em uma árvore. Obteremos então:  A inserção produziu um desbalanceamento. Neste caso, como os sinais dos FB são os mesmos, significa que precisamos fazer apenas uma ROTAÇÃO SIMPLES à direita no nó com FB -2. No caso simétrico (nó com FB 2) faríamos uma rotação simples à esquerda.
  • 15.
    Após a rotação simples teremos:  Agora a árvore está balanceada.
  • 16.
    Como podemos observar, a árvore está balanceada pelos FB de cada nó.  São dois os possíveis casos de desbalanceamento.
  • 17.
    Ao inserir o número 5 na árvore, teremos a seguinte árvore:  O nó 8 fica com o FB -2 e tem um filho com FB +1. Neste caso para manter o balanceamento devemos aplicar duas rotações, também denominada ROTAÇÃO DUPLA.  Primeiro rotaciona-se o nó com FB 1 para a esquerda.
  • 18.
    Logo rotaciona-se o nó que possuía FB -2 na direção oposta, nesse caso a direita.
  • 19.
    Os FB dos nós voltaram a ficar dentro do esperado das árvores AVL.  O caso simétrico ao explicado acima acontece com os sinais de FB trocados, ou seja, um nó com FB +2 com um filho com FB -1. Também utilizaríamos uma rotação dupla, mas nos sentidos contrários, ou seja, o nó com FB -1 seria rotacionado para a direita e o nó com FB +2 seria rotacionado para a esquerda.