Escolar Documentos
Profissional Documentos
Cultura Documentos
rvores
AED (IST/DEEC)
AED (IST/DEEC)
bin
dev
etc
cfb
home
usr
lmv
var
rgc
AED (IST/DEEC)
(2+3)*5
raiz
+
n1
2
*
folha
*
n3
n2
3
n4
+
5
n5
5
3
V={n1,n2,n3,n4,n5}
E={(n1, n2),(n1,n3),(n3,n4),(n3,n5)}
17
8
31
<n
>n
a
b
c
AED (IST/DEEC)
A<a<B<b<C<c<D
Todos os caminhos da raiz para as folhas possuem o mesmo comprimento
AED (IST/DEEC)
AED (IST/DEEC)
10
rvores - Representao em C
Seja a definio em C de uma rvore binria, contendo cada n um
dado de tipo Item.
typedef data;
typedef struct _s1 {
Item data; /* dados */
struct _s1 *left, *right; /* referncia filhos */
} node;
node *root = NULL; /* raz (rvore inicial vazia) */
AED (IST/DEEC)
11
AED (IST/DEEC)
12
AED (IST/DEEC)
13
AED (IST/DEEC)
14
AED (IST/DEEC)
15
16
*leaf;
AED (IST/DEEC)
17
AED (IST/DEEC)
18
12
i
5
ii
8
17
31
iii
7
AED (IST/DEEC)
19
AED (IST/DEEC)
20
CN = 1 + 1/N * Ck-1
1 k N, para N 2
C1 = 1
Para eliminar , multiplica-se ambos os lados por N, e subtrai-se a frmula
para N-1 (nota: k varia at N nos dois )
21
22
e Landis
AED (IST/DEEC)
23
Rotao direita
x
y
Rotao esquerda
24
AED (IST/DEEC)
25
h
A3
h+1
A1
AED (IST/DEEC)
A2
x
h+1
A1
A2
A3
26
A4
h
A1
A1
A2
A2
A3
A4
A3
A2 ou A3 de altura h
AED (IST/DEEC)
27
AED (IST/DEEC)
28
AED (IST/DEEC)
29
AED (IST/DEEC)
30
AED (IST/DEEC)
31
AED (IST/DEEC)
32
AED (IST/DEEC)
33
Red Black
AED (IST/DEEC)
34
AED (IST/DEEC)
35
novo n
AED (IST/DEEC)
36
x
y
w
novo n
x
y
w
novo n
y
z
AED (IST/DEEC)
37
w
z
novo n
Codificao pode ser feita de 2 formas:
Cada n possuir ponteiro para o n pai/me
Recursivamente (muito complicado!)
AED (IST/DEEC)
38
39
10
10
-10
20
-10
30
10
0
0
10
Errado!!!
20
+
-10
20
20
30
30
-10
0
AED (IST/DEEC)
40
rvores - Retirada
Um dado eliminado da rvore, executando os passos
Procurar o n de residncia
Se existir, executar:
Combinar sub-rvores esquerda e direita
Substituir n pelo resultado da combinao
node *delete(int i, node *tree) {
node *aux = tree;
if (tree == NULL) return NULL;
if(i < tree->data) tree->left = delete(i, tree->left);
if(i > tree->data) tree->right = delete(i, tree->right);
if(i == tree->data ) {
tree = join(tree->left, tree->right);
free(aux); }
return tree;}
AED (IST/DEEC)
41
AED (IST/DEEC)
42
AED (IST/DEEC)
43
AED (IST/DEEC)
44
*
n3
n2
3
n4
n5
n1
n2
n3
+
n4
n5
3
*
5
o resultado final : 2 3 5 * +
AED (IST/DEEC)
45
AED (IST/DEEC)
12
5
2
17
8
31
46
AED (IST/DEEC)
47
AED (IST/DEEC)
48
12
5
2
[17,2,8]
[2,8]
17
8
31
[2,8,31]
[8,31]
[31]
[]
Aco
Recolhe 1 elemento
Imprime valor
Insere subrvores esq e dir
Recolhe 1 elemento
Imprime valor
Insere subrvores esq e dir
Recolhe 1 elemento
Imprime valor
Insere subrvores esq e dir
Recolhe 1 elemento
Imprime valor
Insere subrvores esq e dir
Recolhe 1 elemento
Imprime valor
Insere subrvores esq e dir
Recolhe 1 elemento
Imprime valor
Insere subrvores esq e dir
Sada
12
17
31
AED (IST/DEEC)
49
AED (IST/DEEC)
50