Escolar Documentos
Profissional Documentos
Cultura Documentos
• Todos os valores na sub árvore esquerda da raiz são menores que o valor na
raiz
• Todos os valores na sub árvore direita da raiz são maiores que o valor na raiz
70
40 80
35 50 75 89
30 37 55 82 93
70
40 80
35 50 77 90
37 82
38 81 84
70
40 80
35 89
30 93
50
40
35
33
12
40
45
55
83
92
40
20
30
25
27
70
40 80
35 50 75 89
30 37 55 82 93
Pré Ordem: 70 40 35 30 37 50 55 80 75 89 82 93
70
40 80
35 50 75 89
30 37 55 82 93
Em Ordem: 30 35 37 40 50 55 70 75 80 82 89 93
70
40 80
35 50 75 89
30 37 55 82 93
Pós Ordem: 30 37 35 55 50 40 75 82 93 89 80 70
70
40 80
35 50 75 89
30 37 55 82 93
Pré Ordem: 70 40 35 30 37 50 55 80 75 89 82 93
Pós Ordem: 30 37 35 55 50 40 75 82 93 89 80 70
• A busca fracassou
70
40 80
35 50 75 89
30 37 55 82 93
Buscar 37
70
40 80
35 50 75 89
30 37 55 82 93
Buscar 77
return false
arvore.Buscar(45)
Verdadeiro 42 69
Buscar(info) {
retorna (BuscarRecursivo(raiz, info) != Nulo)
} BuscarRecursivo(no, info) { 48 55
se (no == Nulo) retorna Nulo 45
se (info < no.info)
BuscarRecursivo(no, info) { retorna BuscarRecursivo(no.noEsq, info)
se (no == Nulo) retorna Nulo 54 se (info > no.info) 45
se (info < no.info) retorna BuscarRecursivo(no.noDir, info)
retorna BuscarRecursivo(no.noEsq, info) retorna no
se (info > no.info) }
retorna BuscarRecursivo(no.noDir, info)
retorna no
}
arvore.Buscar(58)
Falso 42 69
Buscar(info) {
retorna (BuscarRecursivo(raiz, info) != Nulo)
} BuscarRecursivo(no, info) { 48 55
se (no == Nulo) retorna Nulo
se (info < no.info)
BuscarRecursivo(no, info) { retorna BuscarRecursivo(no.noEsq, info)
se (no == Nulo) retorna Nulo 54 se (info > no.info) 45
se (info < no.info) retorna BuscarRecursivo(no.noDir, info)
retorna BuscarRecursivo(no.noEsq, info) retorna no
se (info > no.info) }
retorna BuscarRecursivo(no.noDir, info)
retorna no
}
70
40 80
35 50 75 89
30 37 55 82 93
70
40 80
35 50 77 90
37 82
38 81 84
50
40
35
33
12
40
45
55
83
92
40
20
30
25
27
return ObterValorMinimoRecursivo(raiz).info
return ObterValorMinimoRecursivo(p.noEsquerdo)
def ObterValorMinimoIterativo(self):
if (VerificarSeVazia()):
print("arvore esta vazia")
return
p = raiz
while (p.noEsquerdo is not None):
p = p.noEsquerdo
return p.info
return ObterValorMaximoRecursivo(raiz).info
def ObterValorMaximoIterativo(self):
if (VerificarSeVazia()):
print("arvore esta vazia")
return
p = raiz
while (p.noDireito is not None):
p = p.noDireito
return p.info
• Se info for menor que o valor no nó atual – Vai para o filho a esquerda
• Se info for maior que o valor no nó atual – Vai para o filho a direita
• Realiza a inserção
70
40 80
35 50 75 89
30 37 55 82 93
36
Inserir 36
70
40 80
35 50 75 89
30 37 55 77 82 93
36
Inserir 77
45
39 60
23 42 55 79
10 34 44 57 77 83
29
45 60 55 39 23 79 57 42 10 34 83 29 77 44
no = No(info)
if (pai is None):
raiz = no
else if (info < pai.info):
pai.noEsquerdo = no
else:
pai.noDireito = no
pai p 70
pai
p 40 80
p 35 pai 50 75 89
30 p 37 55 82 93
temp 36 p nulo
pai.noEsq = temp
Inserir 36
return no
InserirRecursivo(no, info) {
se (p == nulo) p = No(info)
senao se (info < p.info)
p.noEsq = InserirRecursivo(p.noEsq, info)
senao se (info > no.info)
p.noDir = InserirRecursivo(p.noDir, info)
senao
valor duplicado
retorna p
}
Inserir 50
Inserir 60 (* colocar setas indo em vermelho acompanhando a func em vermelho e setas voltando em preto)
• Três possibilidades
39 60
pai 23 42 55 79
p 34 83
Remover 34
39 pai 60
23 42 55 79
83
p
Remover 55
Remover 45
39 60
pai 23 42 79
10 34 44 44 83
filho 29
Remover 34 p
p 39 60
filho 23 79
10 29 44 83
Remover 39
p
raiz 60 filho
50 79
77 83
Remover 45
• Sucessor Em Ordem de um Nó
70
30 84
12 45 78 95
9 38 60 72 86
35 73
• Caso A
• Caso B
39 69
60
23 42 55 79
p
10 34 44 57 ps 77 83
29 sucessor 69 p
Remover 60
42
40 p 69
60
23 48 55 79
10 45 ps 50 57 77 83
sucessor 42 p
43
Remover 40
42
40 69
p
23 48 55 ps 79
10 45 50 54 57 77 83
43
sucessor
Remover 52
return no
pai = p
p.info = s.info
p = s
pai = os