Está en la página 1de 51

Universidade Federal de Alagoas Campus Arapiraca Cincia da Computao Laboratrio de Programao 3 Prof.

Elthon Allex

RVORES BINRIAS
Cloves Oliveira dos Santos

ROTEIRO
rvores; rvore ziguezague; rvore binria; rvore estritamente binria; rvore binria completa; rvore binria cheia. rvore AVL; Problema; Soluo;

RVORES
rvore ziguezague; rvore binria; rvore estritamente binria; rvore binria completa;

31 50
40 42

44
rvore binria cheia.

43

Grau < 2.

RVORES
rvore ziguezague; rvore binria; rvore estritamente binria;

31
20 40 35 42

50

rvore binria completa;

44
rvore binria cheia.

Grau <= 2.

RVORES
rvore ziguezague; rvore binria; rvore estritamente binria;

31
20 40 35 42 41

50
60

rvore binria completa;

44

rvore binria cheia.

Grau 0 ou 2.

RVORES
rvore ziguezague; rvore binria; rvore estritamente binria; rvore binria completa; rvore binria cheia.

31 20
10 25 38 38 50

43
50

Sub-rvores vazias no ultimo ou penltimo nvel. Grau 0 ou 2.

RVORES
rvore ziguezague; rvore binria; rvore estritamente binria; rvore binria completa; rvore binria cheia.

31 20
10 25 38

43
50

Grau 2. Ns: 2+1 1

=2 = 22+1 1 = 7

RVORE AVL
AVL Surgiu de seus criadores, Adelson Velsky e Landi; Deixar a rvore com o menor nmero de nveis possvel; Balancear pela altura para melhorar a eficincia diminuindo o tempo de pesquisa; As alturas das sub-rvores a partir de cada n difere no mximo em uma unidade;

RVORE AVL
AVL:
0 1 0 0 0 0 0 1 0 0 0 0 2 1 1 0 0 1 0 1 0 0 2 1 0 2 3 2 0 0 2 0 0 0 1 0

No AVL:
0 0 0 0

Os nmeros dentro dos ns a diferena entre as alturas das sub-rvores da direita e esquerda.

RVORE AVL PROBLEMA


Implementao em C++.

10

RVORE AVL PROBLEMA


Testando...

11

RVORE AVL PROBLEMA


0

1
2 9 1 14 0 12 0 19 17

50

3 2 54 1 72 0 67 76

1
23

H perda de desempenho.

12

RVORE AVL SOLUO


Balancear na insero e remoo;

Variveis ou outro meio para:


Fator de balanceamento (fb); N direito; N esquerdo; N pai.

Usar rotao para balancear: Rotao (LL): O novo n X inserido na sub-rvore da esquerda do filho esquerdo de A; Rotao (LR): X inserido na sub-rvore da direita do filho esquerdo de A; Rotao (RR): X inserido na sub-rvore da direita do filho direito de A;

Rotao (RL): X inserido na sub-rvore da esquerda do filho direito de A.

13

RVORE AVL SOLUO


Insero: Insero normal, como mostrado anteriormente; Verificao do fator de balanceamento; Se no estiver balanceado, usar rotao. Remoo: Usar rotao em torno do n para torna-lo folha; Pode necessitar realizar outras rotaes para balancear a rvore.

14

RVORE AVL SOLUO


Fator de balanceamento: Valor inicial 0; Para estar balanceado -1 fb 1 , valor diferente indica o no balanceamento;

A partir de um dado n, usualmente = ( ).

15

RVORE AVL SOLUO


Rotao LL - rotao direita: Seja N2 o filho esquerda de N1; Inserindo um n esquerda do filho esquerdo de N1; Torna o filho direito de N2 filho esquerdo de N1;

= 1 = 2 2 = 2 3 = 2

0
N2

N1

A3 A2

A1

Torna N1 filho direito de N2.

Sub-rvore

16

RVORE AVL SOLUO


Rotao LL: Seja N2 o filho esquerda de N1; Inserindo um n esquerda do filho esquerdo de N1; Torna o filho direito de N2 filho esquerdo de N1;

= = 2 = 2 3 = 2

1
N2

N1

A3 A2

A1

Torna N1 filho direito de N2.

Sub-rvore

17

RVORE AVL SOLUO


Rotao LL: Seja N2 o filho esquerda de N1; Inserindo um n esquerda do filho esquerdo de N1; Torna o filho direito de N2 filho esquerdo de N1;

= = 2 = 2 3 = 2

3
N2

0
N1

A1

A2

A3

Torna N1 filho direito de N2.

Sub-rvore

18

RVORE AVL SOLUO


Rotao LL: Seja N2 o filho esquerda de N1; Inserindo um n esquerda do filho esquerdo de N1; Torna o filho direito de N2 filho esquerdo de N1;

= = 2 = 2 3 = 2

1 N2

0
N1

A1 A2

A3

Torna N1 filho direito de N2.

Sub-rvore

19

RVORE AVL SOLUO


Rotao LL: Comparando

2
1

1 N2 0 N1

N1

N2

A3 A2

A1
A2

A1

A3

Antes...

Depois...

Sub-rvore

20

RVORE AVL SOLUO


Rotao RR - rotao esquerda: Seja N2 o filho direita de N1; Inserindo um n direita do filho direito de N1; Torna o filho esquerdo de N2 filho direito de N1;

= 1 = 2 2 = 3 3 = 3

-1 N1

0
N2

A1 A2

A3

Torna N1 filho esquerdo de N2.


Processo inverso

Sub-rvore

21

RVORE AVL SOLUO


Rotao RR: Seja N2 o filho direita de N1; Inserindo um n direita do filho direito de N1; Torna o filho esquerdo de N2 filho direito de N1;

= 1 = 2 2 = 3 =

-2 N1

-1
N2

A1 A2

A3

Torna N1 filho esquerdo de N2.


Processo inverso

Sub-rvore

22

RVORE AVL SOLUO


Rotao RR: Seja N2 o filho direita de N1; Inserindo um n direita do filho direito de N1; Torna o filho esquerdo de N2 filho direito de N1;

= 1 = 2 2 = 3 =

-1
N1

-4
N2

A1

A2

A3

Torna N1 filho esquerdo de N2.


Processo inverso

Sub-rvore

23

RVORE AVL SOLUO


Rotao RR: Seja N2 o filho direita de N1; Inserindo um n direita do filho direito de N1; Torna o filho esquerdo de N2 filho direito de N1;

= 1 = 2 2 = 3 =

-1

-1
N1

N2

A3 A2

A1

Torna N1 filho esquerdo de N2.


Processo inverso

Sub-rvore

24

RVORE AVL SOLUO


Rotao RR: Comparando -2 N1 -1 N2 -1

-1 N2

A1
A2

N1

A3 A2

A3

A1

Antes...

Depois...

Sub-rvore

25

RVORE AVL SOLUO


Rotao LR - rotao dupla direita: Seja N2 o filho esquerda de N1 e o N3 filho direita de N2; Inserindo um n direita do filho esquerdo de N1; Executa Rotao RR em N2 e N3; Executa Rotao LL em N1 e N3.

1 2 3 4

=1 =0 =0 =1 0 N2

1 N1 0 N3

A4

A1

A2

A3

Sub-rvore

26

RVORE AVL SOLUO


Rotao LR: Seja N2 o filho esquerda de N1 e o N3 filho direita de N2; Inserindo um n direita do filho esquerdo de N1; Executa Rotao RR em N2 e N3; Executa Rotao LL em N1 e N3.

1 = 1 = 3 = 0 4 = 1 -1 N2

2 N1 1 N3 A2

A4

A1

A3

Sub-rvore

27

RVORE AVL SOLUO


Rotao LR: Seja N2 o filho esquerda de N1 e o N3 filho direita de N2; Inserindo um n direita do filho esquerdo de N1; Executa Rotao RR em N2 e N3;

1 = 1 = 3 = 0 4 = 1 1 0 N2 A1 N3 A3 A2

2 N1

A4

Executa Rotao LL em N1 e N3.

Sub-rvore

28

RVORE AVL SOLUO


Rotao LR: Seja N2 o filho esquerda de N1 e o N3 filho direita de N2; Inserindo um n direita do filho esquerdo de N1; Executa Rotao RR em N2 e N3; Executa Rotao LL em N1 e N3.

1 = 1 = 3 = 0 4 = 1 0 1 N2 A1

0 N3

-1
N1

A2

A3

A4

Sub-rvore

29

RVORE AVL SOLUO


Rotao LR: Comparando 2 -1 N2 N1 1 N3 A2 Antes... 0 1 A4 A1 A3 Depois... N2 0 N3

-1
N1

A1

A2

A3

A4

Sub-rvore

30

RVORE AVL SOLUO


Rotao RL - rotao dupla esquerda: Exatamente o contrrio da rotao LR; Executa Rotao LL; Em seguida executa Rotao RR; Posteriormente ser mostrado o estado antes da rotao e o final;

31

RVORE AVL SOLUO


Rotao RL: Comparando -2 N1 1 N3 A3 Depois... 1 N2 0

-1
N1

N3

0 1 N2 A4

A1

A4

A1

A2

A3

A2 Antes...

Sub-rvore

32

RVORE AVL SOLUO


0 50 Insero: 50 raiz

Resolvendo o exemplo testado em C++...

33

RVORE AVL SOLUO


1 0 17 50 Insero: 50 raiz; 50: esq = 17

34

RVORE AVL SOLUO


0 0 17 50

0
76

Insero: 50 raiz; 50: esq = 17; 50: dir = 76

35

RVORE AVL SOLUO


1 1 0 9 17 50

0
76

Insero: 50 raiz; 50: esq = 17; 50: dir = 76; 17: esq = 9

36

RVORE AVL SOLUO


1 0 0 9 17 0 50

0
76

23

Insero: 50 raiz; 50: esq = 17; 50: dir = 76; 17: esq = 9; 17: dir = 23

37

RVORE AVL SOLUO


0 0 0 9 17 0 50 0 54

1
76

23

Insero: 50 raiz; 50: esq = 17; 50: dir = 76; 17: esq = 9; 17: dir = 23; 76: esq = 54

38

RVORE AVL SOLUO


1 1 -1 9 0 14 17 0 50 0 54

1
76

23

Insero: 50 raiz; 50: esq = 17; 50: dir = 76; 17: esq = 9; 17: dir = 23; 76: esq = 54; 9: dir = 14

39

RVORE AVL SOLUO


1 0 -1 9 0 14 0 19 17 1 50 0 54

1
76

23

Insero: 50 raiz; 50: esq = 17; 50: dir = 76; 17: esq = 9; 17: dir = 23; 76: esq = 54; 9: dir = 14; 23: esq = 19

40

RVORE AVL SOLUO


0 0 -1 9 0 14 0 19 17 1 50 -1 54 0 72

2
76

23

Insero: 50 raiz; 50: esq = 17; 50: dir = 76; 17: esq = 9; 17: dir = 23; 76: esq = 54; 9: dir = 14; 23: esq = 19; 54: dir = 72

Aplica rotao LR Rotao RR seguida de LL.

41

RVORE AVL SOLUO


0 0 -1 9 0 14 0 19 17 1 50 -1 54

0
72 0 76

23

Insero: 50 raiz; 50: esq = 17; 72: dir = 76; 17: esq = 9; 17: dir = 23; 72: esq = 54; 9: dir = 14; 23: esq = 19; 50: dir = 72

Resultado...

42

RVORE AVL SOLUO


1 1 -2 9 1 14 0 12 Aplica rotao RL Rotao LL seguida de RR. 0 19 17 1 50 -1 54

0
72 0 76

23

Insero: 50 raiz; 50: esq = 17; 72: dir = 76; 17: esq = 9; 17: dir = 23; 72: esq = 54; 9: dir = 14; 23: esq = 19; 50: dir = 72; 14: esq = 12

43

RVORE AVL SOLUO


1 0 0 12 17 1 50 -1 54

0
72 0 76

23 0
14 0 19

0
9

Insero: 50 raiz; 50: esq = 17; 72: dir = 76; 12: esq = 9; 17: dir = 23; 72: esq = 54; 12: dir = 14; 23: esq = 19; 50: dir = 72; 17: esq = 12

Resultado...

44

RVORE AVL SOLUO


0 0 0 12 17 1 50 -1 54

1
72 0 76

23 0
14 0 19

0
9

0
67

Insero: 50 raiz; 50: esq = 17; 72: dir = 76; 12: esq = 9; 17: dir = 23; 72: esq = 54; 12: dir = 14; 23: esq = 19; 50: dir = 72; 17: esq = 12; 54: dir = 67.

Resultado final...

45

RVORE AVL SOLUO


Novas Implementaes:

46

RVORE AVL SOLUO


Novas Implementaes:

47

RVORE AVL SOLUO


Novas Implementaes:

48

RVORE AVL SOLUO


Novas Implementaes:
raiz: 50 50: dir = 72: dir = 72: esq = 54: dir = 50: esq = 17: dir = 23: esq = 17: esq = 12: dir = 12: esq = 72 76 54 67 17 23 19 12 14 9

AVL? (0 - false, 1 - true): 1

49

FONTES
http://www.inf.ufrgs.br/~galante/wiki/lib/exe/fetch.php?id=inf01203&cache=cache&media=i nf01203-arvbinarias.pdf http://www.mat.uc.pt/~amca/ED0506/Acet1.6.pdf http://d.yimg.com/kq/groups/23650627/855905455/name/arvores-binarias.pdf http://pt.wikipedia.org/wiki/%C3%81rvore_AVL

http://www.lcad.icmc.usp.br/~nonato/ED/AVL/node67.html
http://www.lcad.icmc.usp.br/~nonato/ED/AVL/insercao.html http://www.youtube.com/watch?v=mKMwi691rs8 http://www.site.uottawa.ca/~stan/csi2514/applets/avl/BT.html

50

51

También podría gustarte