Escolar Documentos
Profissional Documentos
Cultura Documentos
• Pior caso:
• Melhor caso:
f(k): Busca Sequêncial
• Considerando x com n = 11 elementos não
ordenados:
15 6 7 18 3 13 2 9 4 17 20
15 6 7 18 3 13 2 9 4 17 20
struct bin_node{
int key;
struct bin_node *left;
struct bin_node *right;
};
Percurso em Pré-ordem:
ABDEGCFH
void preorder(node *r){
if (!r) return;
visit(r);
preorder(r->left);
preorder(r->right);
}
Percurso em Profundidade
• Pós-ordem:
1. Percorrer a subarvore esquerda em pós-ordem
2. Percorrer a subarvore direita em pós-ordem
3. Visitar a raiz
Percurso em Pós-ordem:
DGEBHFCA
Percurso em Em-ordem:
DBGEAFHC
void inorder(node *r){
if (!r) return;
inorder(r->left);
visit(r);
inorder(r->right);
}
Árvore binária de busca
• Como o próprio nome sugere, é uma árvore T
do tipo binária (não necessariamente
estritamente binária).
• No entanto, possui as seguintes restrições:
– dada uma raiz r,
• se vl é um nó à esquerda de r, então key[vl] <= key[r]
• Se vr é um nó à direita de r, então key[vr] > key[r]
Árvore binária de busca
Operação de Inserção em uma Árvore
Binária de Busca
• Considere o vetor abaixo:
15 6 7 18 3 13 2 9 4 17 20
INSERT (T, K)
Complexidade O(log n) If T == NIL Then
T = NEW_NODE(K)
NEW_NODE
Else If (K <= T.k) Then
T.left = INSERT (T.left, K)
Else
T.right = INSERT (T.right, k)
RETURN T
15 6 7 18 3 13 2 9 4 17 20
15
6 18
3 7 17 20
INSERT (T, K)
If T == NIL Then
2 4 13 T = NEW_NODE(K)
NEW_NODE
Else If (K <= T.k) Then
T.left = INSERT (T.left, K)
Else
T.right = INSERT (T.right, k)
9 RETURN T
15 6 7 18 3 13 2 9 4 17 20
15
INSERT (T, K)
If T == NIL Then
T = NEW_NODE(K)
NEW_NODE
Else If (K <= T.k) Then
T.left = INSERT (T.left, K)
Else
T.right = INSERT (T.right, k)
RETURN T
15 6 7 18 3 13 2 9 4 17 20
15
INSERT (T, K)
If T == NIL Then
T = NEW_NODE(K)
NEW_NODE
Else If (K <= T.k) Then
T.left = INSERT (T.left, K)
Else
T.right = INSERT (T.right, k)
RETURN T
15 6 7 18 3 13 2 9 4 17 20
15
INSERT (T, K)
If T == NIL Then
T = NEW_NODE(K)
NEW_NODE
Else If (K <= T.k) Then
T.left = INSERT (T.left, K)
Else
T.right = INSERT (T.right, k)
RETURN T
15 6 7 18 3 13 2 9 4 17 20
15
6 18
INSERT (T, K)
If T == NIL Then
T = NEW_NODE(K)
NEW_NODE
Else If (K <= T.k) Then
T.left = INSERT (T.left, K)
Else
T.right = INSERT (T.right, k)
RETURN T
15 6 7 18 3 13 2 9 4 17 20
15
6 18
3 7
INSERT (T, K)
If T == NIL Then
T = NEW_NODE(K)
NEW_NODE
Else If (K <= T.k) Then
T.left = INSERT (T.left, K)
Else
T.right = INSERT (T.right, k)
RETURN T
15 6 7 18 3 13 2 9 4 17 20
15
6 18
3 7
INSERT (T, K)
If T == NIL Then
13 T = NEW_NODE(K)
NEW_NODE
Else If (K <= T.k) Then
T.left = INSERT (T.left, K)
Else
T.right = INSERT (T.right, k)
RETURN T
15 6 7 18 3 13 2 9 4 17 20
15
6 18
3 7
INSERT (T, K)
If T == NIL Then
2 13 T = NEW_NODE(K)
NEW_NODE
Else If (K <= T.k) Then
T.left = INSERT (T.left, K)
Else
T.right = INSERT (T.right, k)
RETURN T
15 6 7 18 3 13 2 9 4 17 20
15
6 18
3 7
INSERT (T, K)
If T == NIL Then
2 13 T = NEW_NODE(K)
NEW_NODE
Else If (K <= T.k) Then
T.left = INSERT (T.left, K)
Else
T.right = INSERT (T.right, k)
9 RETURN T
15 6 7 18 3 13 2 9 4 17 20
15
6 18
3 7
INSERT (T, K)
If T == NIL Then
2 4 13 T = NEW_NODE(K)
NEW_NODE
Else If (K <= T.k) Then
T.left = INSERT (T.left, K)
Else
T.right = INSERT (T.right, k)
9 RETURN T
15 6 7 18 3 13 2 9 4 17 20
15
6 18
3 7 17
INSERT (T, K)
If T == NIL Then
2 4 13 T = NEW_NODE(K)
NEW_NODE
Else If (K <= T.k) Then
T.left = INSERT (T.left, K)
Else
T.right = INSERT (T.right, k)
9 RETURN T
15 6 7 18 3 13 2 9 4 17 20
15
6 18
3 7 17 20
INSERT (T, K)
If T == NIL Then
2 4 13 T = NEW_NODE(K)
NEW_NODE
Else If (K <= T.k) Then
T.left = INSERT (T.left, K)
Else
T.right = INSERT (T.right, k)
9 RETURN T
Busca
• Dada uma árvore T e uma chave k,
implemente uma função de busca que:
– retorne o nó TRUE, se k existir em T
– Ou retorne FALSE, caso contrário
SEARCH(T,
SEARCH K)
If T == NIL Then
RETURN false
O(log n) Else If (K < T.k) Then
RETURN SEARCH (T.left, K)
Else If (K > T.k)
RETURN SEARCH (T.right, k)
RETURN true
Remoção
15
6 18
3 7 17 20
2 4 13
9
Remoção
• Existem 3 situações
– Remoção de um nó folha
– Remoção de um nó raiz com grau 1
– Remoção de um nó raiz com grau 2
15
6 18
3 7 17 20
2 4 13
9
Remoção
• Existem 3 situações
– Remoção de um nó folha
– Remoção de um nó raiz com grau 1
– Remoção de um nó raiz com grau 2
15
6 18
3 7 17 20
2 4 13
9
Remoção
• Existem 3 situações
– Remoção de um nó folha
– Remoção de um nó raiz com grau 1
– Remoção de um nó raiz com grau 2
15
6 18
3 7 17 20
2 4 13
Remoção
• Existem 3 situações
– Remoção de um nó folha
– Remoção de um nó raiz com grau 1
– Remoção de um nó raiz com grau 2
15
6 18
3 7 17 20
2 4 13
Remoção
• Existem 3 situações
– Remoção de um nó folha
– Remoção de um nó raiz com grau 1
– Remoção de um nó raiz com grau 2
15
6 18
3 7 17 20
2 4 13
Remoção
• Existem 3 situações
– Remoção de um nó folha
– Remoção de um nó raiz com grau 1
– Remoção de um nó raiz com grau 2
15
6 18
3 13 17 20
2 4
Remoção
• Existem 3 situações
– Remoção de um nó folha
– Remoção de um nó raiz com grau 1
– Remoção de um nó raiz com grau 2
15
6 18
3 13 17 20
2 4
Remoção
• Existem 3 situações
– Remoção de um nó folha
– Remoção de um nó raiz com grau 1
– Remoção de um nó raiz com grau 2
15
3 13 17 20
2 4
Remoção
• Existem 3 situações
– Remoção de um nó folha
– Remoção de um nó raiz com grau 1
– Remoção de um nó raiz com grau 2
15
r
1: Encontre um r’ tal que r’ seja o
6 18 nó mais à direita a subarvore à
esquerda de r
3 13 17 20
2 4
Remoção
• Existem 3 situações
– Remoção de um nó folha
– Remoção de um nó raiz com grau 1
– Remoção de um nó raiz com grau 2
15
r
1: Encontre um r’ tal que r’ seja o
6 18 nó mais à direita a subarvore à
esquerda de r
3 13 17 20
2 4
Remoção
• Existem 3 situações
– Remoção de um nó folha
– Remoção de um nó raiz com grau 1
– Remoção de um nó raiz com grau 2
15
r
1: Encontre um r’ tal que r’ seja o
6 18 nó mais à direita a subarvore à
esquerda de r
3 13 17 20
2 4
Remoção
• Existem 3 situações
– Remoção de um nó folha
– Remoção de um nó raiz com grau 1
– Remoção de um nó raiz com grau 2
15
r
1: Encontre um r’ tal que r’ seja o
6 18 nó mais à direita a subarvore à
esquerda de r
2: troque a chave r.key com r’.key
3 13 17 20
2 4
Remoção
• Existem 3 situações
– Remoção de um nó folha
– Remoção de um nó raiz com grau 1
– Remoção de um nó raiz com grau 2
15
r
1: Encontre um r’ tal que r’ seja o
4 18 nó mais à direita a subarvore à
esquerda de r
2: troque a chave r.key com r’.key
3 13 17 20
2 6
Remoção
• Existem 3 situações
– Remoção de um nó folha
– Remoção de um nó raiz com grau 1
– Remoção de um nó raiz com grau 2
15
r
1: Encontre um r’ tal que r’ seja o
4 18 nó mais à direita a subarvore à
esquerda de r
2: troque a chave r.key com r’.key
3 13 17 20 3: remova recursivamente key a
partir de r.left
2 6
Remoção
• Existem 3 situações
– Remoção de um nó folha
– Remoção de um nó raiz com grau 1
– Remoção de um nó raiz com grau 2
15
r
1: Encontre um r’ tal que r’ seja o
4 18 nó mais à direita a subarvore à
esquerda de r
2: troque a chave r.key com r’.key
3 13 17 20 3: remova recursivamente key a
partir de r.left
2 6
Remoção
• Existem 3 situações
– Remoção de um nó folha
– Remoção de um nó raiz com grau 1
– Remoção de um nó raiz com grau 2
15