You are on page 1of 5

Estrutura de Dados 2

Professor.: Bogado

site: https://mooc.ct.utfpr.edu.br/dashboard

• Aula 1 - 07/03/2018

– Todos os avisos serão feitos pelo site, olhar periodicamente


– Linguagem de programação: Java 8
– Coisa legal para se fazer em java:
a = 4;
int result = a == 4 ? 1 : 8;
// result will be 1
// This is equivalent to
int result;
if (a == 4)
result = 1;
else
result = 8;

– String a = new String(”Wow”);


String b = new String(”Wow”);
String sameA = a;
boolean r1 = a == b; // This is false, since a and b are not the
same object
boolean r2 = a.equals(b); // This is true, since a and b are logi-
cally equals
boolean r3 = a == sameA; // This is true, since a and sameA are
really the same object

1
• Aula 2
– Percurso em árvores
∗ Site legal: http://wiki.icmc.usp.br/images/9/93/ArvoresBin
∗ DÚVIDA: SE EU MEXER NA ÁRVORE NA FUNÇÃO
DO MEU PROGRAMA, ELA CONTINUA ALTER-
ADA? PORQUE SE NÃO, NÃO CONSEGUIREI PER-
CORRER A ÁRVORE MAIS DE UMA VEZ.
∗ O que pode dar errado: ponteiros nulos, o java não condefere
e se você tentar acessar um ponteiro nulo, pode dar errado...
∗ CONFERIR SE A ÁRVORE ESTÁ VAZIA.
∗ CONFERIR SE O NÓ QUE VOCÊ VAI PERCOR-
RER É NULO.

∗ Em ordem: (sub árvore esquerda/raiz/direta) = não tem no


trabalho.

∗ Em nı́vel: Nı́vel do nó: A raiz de uma árvore tem nı́vel 1.Se


um nó tem nı́vel i,seus filhos têm nı́vel i + 1. Podemos acessar
a raiz, e colocar o filho da esquerda em uma fila (primeiro a
entrar, primeiro a sair, conferir se os filhos não são nulos), ao
lado do direito, assim pegamos o elemento que acabamos de
adicionar na fila e colocamos os filhos dele ao fim do vetor (se
existirem). Se não existirem, podemos apenas passar para o
próximo elemento da fila, e quando adicionarmos o último el-
emento da fila sem filhos, chegamos ao fim! Aı́ é só percorrer
a fila novamente em ordem ;) Nesse caso precisaremos de dois
auxiliares na fila, um percorrendo ele bonitinho, elemento por
elemento, e outro no fim da fila para ir adicionando os novos
elementos.

∗ Pré ordem: (raiz/esqueda/direita) = vai margeando a árvore/sub


árvore da esquerda, se ela acabar, vá voltando até achar um
nó cujo filho (prioridade para a esquerda sempre) ainda não foi
visitado, e o visite, e vá descendo a árvore pela esqueda sem-
pre que possı́vel. Para facilitar, use os marcadores na árvore
de ”já visitado”. Sim, dando prioridade às ”sub árvores” que

2
estão mais abaixo”. No caso de uma busca não recursiva,
cada vez que passarmos por um nó (andando pra esqueda)
e acharmos um nó à direita de um que podemos continuar
percorrendo pela esquerda, salvamos em uma pilha (porque
estamos dando prioridade às ”subárvores mais baixas”), as-
sim o último a entrar é o primeiro a sair... E assim vamos
percorrendo a árvore :D Como vamos percorrer a árvore com
uma flag, não precisamos ir de nó em nó, podemos simples-
mente ”pular” de um nó para outro.

∗ Pós ordem: (esquerda/direita/raiz) = Esse método vai de


baixo para cima, primeiro na esquerda, depois na direita e por
fim o topo, ele da preferência aos filhos, primeiro ele confere se
todos os filhos da esquerda (esses tem prioridade) e da direita
foram verificados. Primeiramente, ”margeamos” a árvore pela
esquerda, tentando chegar ao filho mais a esquerda, voltamos
ao pai, e conferimos se ambos os filhos foram visitados. Se
o filho da esquerda não foi visitado, vamos para a esquerda,
depois o olhamos para o filho da direita. Se o nó teve am-
bos os vilhos visitados, então visitamos ele. Vamos ao pai
dele e repetimos o processo, até chegas à raiz. Temos que
analizar isso certipo, porque parece que não podemos visi-
tar a raiz, então quando chegarmos nela paramos. Se não,
era só conferir os filhos dela normalmente, e através desse
processo a raiz seria visitada por último :) Agora pensando
niso sem usar recursividade: começamos pela raiz, vamos pas-
sando pelas subárvores à esquerda, e ”guardando” os nós pelos
quais formos passando em uma pilha (quem entra por último
sai primeiro), assim estaremos visitando os nós mais baixos
primeiro. Conferimos o primeiro nó da fila, se já tivermos
passado pelos dois filhos, visitamos ele, e passamos para o
próximo da pilha, verificamos os filhos, se algum não for per-
corrido, percorremos ele e vamos colocando na pilha, e assim,
vamos colocando e tirando os nós da pilha. Fazemos isso en-
quanto a raiz não for visitada, ou o filho da esquerda da raiz
e o da direita, dependendo do que o programa pedir.

3
– Primeira tarefa de programação
1. Implemente o método visitaPreOrdem que visitará os nós em
pré-ordem recursivamente.
2. Implemente o método proximoPreOrdem que visitará os nós
em pré-ordem iterativamente.
3. Implemente o método visitaPosOrdem que visitará os nós em
pós-ordem recursivamente.
4. Implemente o método proximoPosOrdem que visitará os nós
em pós-ordem iterativamente.
5. Implemente o método proximoEmNivel que visitará os nós em
ordem de nı́vel, do menor para o maior e da esquerda para a
direita, iterativamente.
– Dica para passar a árvore para um vetor: Filhos de i são 2i+1
e 2i+2, sendo o i o valor da posição mesmo, incluindo o zero do
primeiro elemento. Nesse caso, se for a raiz, mudamos a posição
para zero, e colocamos a posição de cada elemento no vetor em
uma das informações...
– CUIDADO PARA NÃO ESQUECER DAS PROPRIEDADES BÁSICAS
DAS ÁRVORES...

4
• Aula 3

You might also like