Escolar Documentos
Profissional Documentos
Cultura Documentos
ESTRUTURAS DE DADOS
Nota que uma árvore é composta pelo nó raiz, do qual saem todos os outros nós e/ou
folhas.
2
Essa outra figura contém um exemplo de uma árvore que representa a hierarquia de
uma empresa:
3
Esse processo é repetido até que o valor seja encontrado. Se o valor não for encontrado,
então o valor não deve estar presente na árvore.
Uma árvore binária de busca aceita outras operações além de busca. Na inserção, a raiz
é verificada e introduz-se um nó novo na subárvore da esquerda, se o novo valor for
menor do que a raiz, ou na subárvore da direita, se o valor novo for maior do que a raiz.
4
Removendo um nó com uma folha
SAIBA MAIS
5
6.2 Balanceamento de árvores binárias
Dizemos que uma árvore está balanceada quando a altura das duas subárvores da raiz
for igual a 1, -1 ou 0. Veja um exemplo de uma árvore desbalanceada:
Árvore desbalanceada
Árvore balanceada
6
Rotação à esquerda simples
7
Rotação à direita dupla
Veja os grafos a seguir expondo um problema a ser resolvido com esse algoritmo. Qual
o caminho mais curto em ter os pontos A e F?
8
Vértice Passo 1 Passo 2 Passo 3 Passo 4 Passo 5 Passo 6
A 0, A - - - - -
B 5, A 5, B 5, B - - -
C 3, A 3, A - - - -
D ∞ 12, C 11, B 11, B - -
E ∞ 14, C 14, C 14, D 14, D -
F ∞ ∞ ∞ 17, D 17, E 17, E
9
Transformaremos o cenário em um sistema de grafos:
Para mapear o cenário, traçaremos uma reta entre o ponto inicial (robô) e o ponto final
(bola) e também traçaremos retas perpendiculares à essa reta nos outros grafos:
Traçaremos um círculo em torno de cada grafo com distância de 2r (2 vezes seu raio)
para evitar colisões ao estabelecer a rota do robô. Os pontos de intersecção das retas
perpendiculares e os círculos serão considerados grafos do nosso sistema.
10
Então ligamos os grafos uns com os outros a partir do ponto de origem:
Este é nosso grafo, já com o cálculo dos custos de percurso entre os pontos,
considerando a distância entre eles:
11
Aplicando o algoritmo de Dijkstra, chega-se a esta solução de percurso:
Mostrando no cenário:
12
Os valores estão em branco, pois iremos escolhê-los durante a execução do programa.
Eis o código:
class Tree:
def __init__(self, cargo, left=None, right=None):
self.cargo = cargo
self.left = left
self.right = right
printTreeIndented(tree.right, level+1)
printTreeIndented(tree.left, level+1)
def abertura():
printTreeIndented(tree, level=0)
13
elif b < a and c > a:
printTreeIndented(tree, level=0)
else:
abertura()
abertura()
O número mais à esquerda é a raiz; as folhas e nós da ramificação esquerda estão abaixo
do número mais à esquerda; as folhas e nós da ramificação direita estão acima do
número mais à esquerda.
Para criarmos uma árvore com mais ramificações, é só alterarmos o código. Vejamos o
trecho alterado para criarmos uma árvore com uma raiz e quatro elementos, com os
seguintes formatos:
14
(…)
printTreeIndented(tree.right, level+1)
printTreeIndented(tree.left, level+1)
printTreeIndented1(tree.left, level+1)
printTreeIndented1(tree.right, level+1)
def abertura():
15
d = input("Digite o valor de uma das folhas: ")
if b > a and c > b > a and d > c > a and e > d > a:
printTreeIndented(tree, level=0)
elif b < a and c < b < a and d < c < a and e < d < a:
printTreeIndented1(tree, level=0)
elif b < a and c < b < a and d < c < e and e > c < b and e > c > d and e > d:
printTreeIndented(tree, level=0)
elif b > a and c > b > a and d < c < e and e > c > b and e > c > d and e > d:
printTreeIndented1(tree, level=0)
elif a > b > d and b > d and a < c < e and c < e:
printTreeIndented1(tree, level=0)
else:
16
abertura()
abertura()
Conclusão
Neste bloco, você aprendeu sobre como trabalhar com árvores binárias, seus principais
conceitos e aplicações práticas e também como representá-las na linguagem Python.
Por aqui terminamos esta disciplina. Nos vemos nas avaliações!
17
Referências
18