Você está na página 1de 15

UNIVERSIDADE EDUARDO MONDLANE

FACULDADE DE ENGENHARIA

DEPARTAMENTO DE ENGENHARIA ELETROTÉCNICA


LICENCIATURA EM ENGENHARIA INFORMÁTICA 

Estrutura de Dados e Algoritmos

Estudantes : Arvore Balanceada


• Munaira Junior ,Luis
• Nhampalela, Ginencio
• Sebastian , Rui

Matola, Outubro 2022


Arvore Balanceada - AVL
Objectivos

Objectivo Geral
• Balancear uma Arvore Binaria

Objectivo Especifico
• Balancear Apos Inserir
• Balancear Apos Remover
• Factor Balanceamento
Arvore Balanceada - AVL
Conceitos Basicos

Árvore AVL é uma arvore binária de busca balanceada, ou seja


uma arvore que minimiza o numero de operações efectuadas no
pior caso é de O(log n).
Operacoes de Busca, inserção e Remoção de elementos possuem
complexidade O(log n)
n- numero de elementos na arvore
Arvore Balanceada - AVL
Estrutura

Toda Árvore AVL é balanceada, isto é, sua altura é O(log n).

• A vantagem de balanceamento é possibilitar a complexidade O(log n)

• As operações de inserção e Remoção, a Árvore AVL possuem custo similar.

Para garantir essa propriedade cada inserção ou Remoção o factor de

balanceamento deve ser actualizado , Apartir do nó pai do nó inserido até a

raiz da Árvore.
Arvore Balanceada - AVL
Estrutura_cont

A estrutura cada elemento é chamado de Nó, e cada no armazena


chave de dois ponteiros Para :

SubÁrvore a esquerda e outra SubÁrvore a Direita.


10

8 12

4 9 11 29
Arvore Balanceada - AVL
Balanceamento

Uma arvore Binária T é denominada AVL quando, para qualquer nó de T,


as alturas das suas SubÁrvores, Esquerda e Direita Diferem de até uma
unidade.

Fb = | h_Direita(k) – h_Esquerda(K) | <= 1

Fb é chamado fator de balançeamento do nó.

Quando Fb possui -1, 0 ou 1 então o mesmo é um Nó Regulado. Todos nós de


AVL são regulados. Caso não a Árvore não é AVL.
Arvore Balanceada - AVL
Rotações

Se o Fb = -2 ou Fb = 2, deve aplicar a rotação necessária.

Na remoção a verificação deverá prosseguir até a raiz, podendo requerer


mais de uma rotação.

Tipos de Rotação

• Rotação a Direita Rotação Direita - Esquerda


• Rotação a Esquerda Rotação Esquerda - Direita
Arvore Balanceada - AVL
Balanceamento
AVL >> Altura (height):

Se;
H ( Ǿ ) = -1
H ( root ) = 0
SA_E SA_D H( n ) = max( H(SA_E) , H(SA_D) ) + 1 ;

Balanceamento (factor balance):


B(n) = H(SA_E) - H(SA_D) ; // 0 ,1, -1 Aceitavel
AVL_Arvore = | B(n) | <= 1 // Arvore Regulada
B(n) = 2 ou -2 //Desbalanceado a esquera ou Direita
Arvore Balanceada - AVL
Balanceamento
AVL B(n) = H(SA_E) - H(SA_D) ;
3
AVL_Arvore = | B(n) | <= 1

1 4 B(3) = 1 – 0 = 1
B(4) = -1 – ( -1) = 0
B(1) = 0 – 0 = 0
0 2 B(0) = -1 – (-1) = 0
B(2) = -1 – (-1) = 0
Esta é uma
Árvore AVL
Arvore Balanceada – AVL FENG-UEM 2022

Balanceamento
B(n) = H(SA_E) - H(SA_D) ;
4
AVL_Arvore = | B(n) | <= 1

3 B(4) = 2 – ( -1) = 3
B(3) = 1 – (-1) = 2
B(1) = 0 - 0 = 0
B(2) = -1 – (-1) = 0
1 B(0) = -1 – (-1) = 0

0 2

OBS: Não está balanceada,


! portanto não é AVL
Arvore Balanceada – AVL FENG-UEM 2022

Rotações Rotações a Esquerda


• Rotações Simples 25

A
32
10 B = -2 , h = 2 10

B private No rotacao_Esquerda ( No<T> A ) { // Java


Null = -1 25 B = -1, h = 1
No<T> B,C ;
B = A.getNoDireito();
c C = B.getNoEsquerdo();
Null = -1 32 B = 0, h = 0 B.setNoEsquerdo(A);
A.setNoDireito(C);
Null = -1 Null = -1
A.setAltura(Math.max(altura(A.getNoEsquerdo()), altura(A.getNoDireito())) + 1);
B(10) = -1 – (+1) = -2 B.setAltura(Math.max(altura(B.getNoEsquerdo()), altura(B.getNoDireito())) + 1);
return B;
}
Arvore Balanceada – AVL FENG-UEM 2022

Rotações Rotações a Direita


• Rotações Simples 35

A
50
B = +2 , h = 2 50 20

B
B = +1, h = 1 35 private No rotacao_Direita ( No<T> A ) { // Java
Null = -1
No<T> B,C ;
B = A.getNoEsquerdo();
c
B = 0, h = 0 Null = -1 C = B.getNoDireito();
B.setNoDireito(A);
20 A.setNoEsquerdo(C);

Null = -1 Null = -1 A.setAltura(Math.max(altura(A.getNoEsquerdo()), altura(A.getNoDireito())) + 1);


B.setAltura(Math.max(altura(B.getNoEsquerdo()), altura(B.getNoDireito())) + 1);
B(50) = +1 – (-1) = +2 return B;
}
Arvore Balanceada – AVL FENG-UEM 2022

Dupla Rotações Rotações a Direita-Esquerda


AVL
150

100 100

100 200
200 150

150 200

public No rorataco_Direita_Esquerda(No<T> no) {


no.setNoDireito(rightRotation(no.getNoDireito()));
B(100) = -1 – (+1) = -2 return LefttRotation(no);
}
Arvore Balanceada – AVL FENG-UEM 2022

Dupla Rotações Rotações a Esquerda_Direita


• Rotações Simples
150
200 200

100 200
100 150

150 100

public No rorataco_Esquerda_Direita(No<T> no) {


no.setNoEsquerdo(LefttRotation(no.getNoEsquerdo()));
B(200) = +1 – (-1) = +2 return rightRotation(no);
}
Obrigado!
>> codigo

Você também pode gostar