Beruflich Dokumente
Kultur Dokumente
RVORE (EXEMPLO)
19/02/2013
RVORE
Estrutura no-linear com tempo de acesso em mdia O(log n). Coleo de ns em hierarquia
RVORE (ILUSTRACAO)
raiz
root
raiz
...
19/02/2013
RVORE (ILUSTRACAO)
raiz
RVORE
raiz
Nvel 0
19/02/2013
RVORE
Uma
RVORE
Por questoes de implementao apontadores podem existir tambm dos filhos para o pai
O numero de filhos por n diferenciam os vrios tipos de arvores existentes. Cada n da rvore encontra-se em determinado nvel. A raiz encontra-se no nvel zero. Propriedade fundamental: s existe um caminho da raiz para um outro n da rvore. Altura de uma rvore: comprimento do caminho mais longo da raiz at as folhas
19/02/2013
RVORE (APLICABILIDADE)
Representacao
de expressoes aritmticas
5*3 + 4/2
+ * 5 3 4 / 2
EXERCCIO
Qual
a profundidade do n 6? Qual a altura da rvore? Os ns 6 e 9 esto no mesmo nvel? e 7 e 11? Qual o grau do n 7? E de 9? E de 4?
10
19/02/2013
7 4
Desenhe diversas arvores e tente deduzir.
6 9 3 2 1
11
EXERCCIO
12
19/02/2013
2h
2h+1 - 1
19/02/2013
Visita raiz Percorre sub-rvore esquerda em pr-ordem Percorre sub-rvore direita em pr-ordem Percorre sub-rvore esquerda em ordem simtrica Visita raiz Percorre sub-rvore direita em ordem simtrica Percorre sub-rvore esquerda em ps-ordem Percorre sub-rvore direita em ps-ordem Visita raiz
15
Applet:
http://www.cosc.canterbury.ac.nz/mukundan/dsal/BTree.html
ARVORES BINRIAS
12
10
14
11
13
15
16
19/02/2013
ARVORES BINRIAS
Impresso em pr-ordem:
8
8
12
10
14
11
13
15
17
ARVORES BINRIAS
Impresso em pr-ordem:
8
8,4
12
10
14
11
13
15
18
19/02/2013
ARVORES BINRIAS
Impresso em pr-ordem:
8
8,4,2
12
10
14
11
13
15
19
ARVORES BINRIAS
Impresso em pr-ordem:
8
8,4,2,1
12
10
14
11
13
15
20
10
19/02/2013
ARVORES BINRIAS
Impresso em pr-ordem:
8
8,4,2,1,3
12
10
14
11
13
15
21
ARVORES BINRIAS
Impresso em pr-ordem:
8
8,4,2,1,3,6
12
10
14
11
13
15
22
11
19/02/2013
ARVORES BINRIAS
Impresso em pr-ordem:
8
8,4,2,1,3,6,5
12
10
14
11
13
15
23
ARVORES BINRIAS
Impresso em pr-ordem:
8
8,4,2,1,3,6,5,7
12
10
14
11
13
15
24
12
19/02/2013
ARVORES BINRIAS
Impresso em pr-ordem:
8
8,4,2,1,3,6,5,7, 12
12
10
14
11
13
15
25
ARVORES BINRIAS
Impresso em pr-ordem:
8
8,4,2,1,3,6,5,7, 12,10
12
10
14
11
13
15
26
13
19/02/2013
ARVORES BINRIAS
Impresso em pr-ordem:
8
8,4,2,1,3,6,5,7, 12,10,9
12
10
14
11
13
15
27
ARVORES BINRIAS
Impresso em pr-ordem:
8
8,4,2,1,3,6,5,7, 12,10,9,11
12
10
14
11
13
15
28
14
19/02/2013
ARVORES BINRIAS
Impresso em pr-ordem:
8
8,4,2,1,3,6,5,7, 12,10,9,11,14
12
10
14
11
13
15
29
ARVORES BINRIAS
Impresso em pr-ordem:
8
8,4,2,1,3,6,5,7, 12,10,9,11,14,13
12
10
14
11
13
15
30
15
19/02/2013
EXERCCIO
31
ARVORES BINRIAS
1,2,3,4,5,6,7,8,9 10,11,12,13,14,15
12
10
14
11
13
15
32
16
19/02/2013
EXERCCIO
33
ARVORES BINRIAS
1,3,2,5,7,6,4,9,11,10 13,15,14,12,8
12
10
14
11
13
15
34
17
19/02/2013
EXERCCIO
35
que composta uma rvore binria? Como implementar uma rvore binria?
36
18
19/02/2013
que composta uma rvore binria? Como implementar uma rvore binria?
public class BTNode<T> { protected T data; protected BTNode<T> left; protected BTNode<T> right; protected BTNode<T> parent; public boolean isEmpty(){ return this.data == null; }
37
que composta uma rvore binria? Como implementar uma rvore binria?
public interface BT<T> { public BTNode<T> getRoot(); public boolean isEmpty(); public int height(); public BTNode<T> search(T elem); public void insert(T value); public void remove(T key); public T[] preOrder(); public T[] order(); public T[] postOrder(); public int size(); }
38
19
19/02/2013
= NIL
20
19/02/2013
data
data
null null
NIL
NIL
41
rvore binria de busca ou rvore binria de pesquisa uma rvore binria onde todos os ns armazenam dados comparveis
todos ns da sub-rvore esquerda contm valores menores do que o n raiz todos os ns da subrvore direita contm valores maiores do que o n raiz.
x
<x
>x
42
21
19/02/2013
EXEMPLO
2 Subrvores
> >
44
22
19/02/2013
45
public BTNode<T> maximum(); public BTNode<T> minimum(); public BTNode<T> successor(BTNode<T> node); public BTNode<T> predecessor(BTNode<T> node);
}
46
23
19/02/2013
PESQUISA BINRIA
Como
Verifica se o dado do n igual chave dada Se nao for Se a chave dada for menor que o dado do n, pesquisa na sub-rvore a esquerda Senao pesquise na sub-rvore a direita
47
24
19/02/2013
RVORE DESBALANCEADA
42
<x
88
94 95
>x
49
RVORE DESBALANCEADA
42 88 94 95
<x
O(n)
>x
25
19/02/2013
MINIMUM
Como
BST?
51
MAXIMUM
Como
BST?
52
26
19/02/2013
SUCESSOR
Como
53
SUCESSOR
Como
54
27
19/02/2013
PREDECESSOR
Como
Tree-Predecessor(x) if left[x] != NIL then return Tree-Maximum(left[x]) y = p[x] while y != NIL and x = left[y] do x = y y = p[y] return y
55
PREDECESSOR
Como
Tree-Predecessor(x) if left[x] != NIL then return Tree-Maximum(left[x]) y = p[x] while y != NIL and x = left[y] do x = y y = p[y] return y
56
28
19/02/2013
Processar apenas chaves diferentes da raiz Se a chave for menor, insere no filho a esquerda Se a chave for maior insere no filho a direita Insercao sempre acontece em uma nova folha
57
EXERCCIO 1
58
29
19/02/2013
EXERCCIO 1
46
59
EXERCCIO 1
46
47 60
30
19/02/2013
EXERCCIO 1
46
44
47 61
EXERCCIO 1
46
44
47 62
45
31
19/02/2013
64
32
19/02/2013
66
33
19/02/2013
Se o n y (a ser removido) for uma folha entao remova-o. Se o n y tem apenas um filho, ento ligamos o pai de y ao filho de y Se tem dois filhos ento traz o sucessor de y para o lugar dele e remove o sucessor
12 12
10
14
10
15
11
13
15
11
13
67
68
34
19/02/2013
Tem 2 filhos
69
70
35
19/02/2013
71
72
36
19/02/2013
73
74
37
19/02/2013
Se for folha remove Senao sobe o menor descendente a direita (sucessor) Se nao existir menor descendente a direita ento sobe o maior descendente a esquerda (predecessor) Remove recursivamente o n movido.
75
76
38
19/02/2013
77
78
39
19/02/2013
79
80
40
19/02/2013
remover 90
81
82
41
19/02/2013
XYZ(value) { BSTNode node = search(value) if(node != NIL){ O if(node is leaf){ RVORE INRIA EMOCAO node = NIL }else if (node has one child){ if node != root if(node is left child){ if(node.left != NIL) node.left is left child of node.parent else node.right is left child of node.parent else //node is right child if(node.left != NIL) node.left is right child of parent else node.right is right child of parent else root = not NIL child of root }else{ BSTNode sucessor = sucessor(node); node.value = sucessor.value; XYZ(sucessor); } } }
(R
83
12
10
14
11
13
15
84
42
19/02/2013
12
10
14
11
13
15
86
43
19/02/2013
87
12
10
14
11
13
15
88
44
19/02/2013
89
RVORE BINRIA
Como seria para calcular recursivamente o tamanho (quantidade de elementos) de uma rvore binria
size(root) = 1 + size(left) + size(right) 1 size size
90
45
19/02/2013
RVORE BINRIA
Como seria para calcular recursivamente o tamanho (quantidade de elementos) de uma rvore binria
int size(){ return size(root) } int size(BSTNode node){ if(node.isEmpty) return 0 else return 1 + size(node.left) + size(node.right) }
91
POSCOMP 2009
92
46
19/02/2013
POSCOMP 2009
93
POSCOMP 2009
94
47
19/02/2013
POSCOMP 2009
95
REFERNCIAS
Captulo 13
96
48