Você está na página 1de 3

30/10/2012

Árvores
 Árvores Binárias Ordenadas podem ser
ALGESD 09 implementadas a partir de nodos iguais
aos nodos das listas duplamente
Árvores encadeadas onde os links apontam para
os filhos à esquerda e à direita:
Prof. Dr. Marcelo Duduchi class Node {
char data;
Node linke,linkd;
} linke data linkd

Árvores Binárias Ordenadas Árvores Binárias Ordenadas


class ArvBinOrdFone { void IncListaFone (String nm, String fn){
class Node { raiz = IncAux(raiz, nm, fn);
String nome; }
String fone; Node IncAux (Node raiz, String nm, String fn){
Node linke,linkd; if(raiz == null){
} Node aux = new Node();
Node raiz; aux.nome = nm; aux.fone = fn;
ArvBinOrdFone ( ) { aux.linke = null; aux.linkd = null;
raiz = null; return aux;
} ... }
} else{ ...

Árvores Binárias Ordenadas Árvores Binárias Ordenadas


... ...
if(raiz.nome.compareTo(nm)>0){ else{
raiz.linke = IncAux(raiz.linke, nm, fn); System.out.println("Nome já existe!");
return raiz; return raiz;
} }
else
if(raiz.nome.compareTo(nm)<0){ }
raiz.linkd = IncAux(raiz.linkd, nm, fn); }
return raiz;
}
...

1
30/10/2012

Árvores Binárias Ordenadas Árvores Binárias Ordenadas


void preOrdem(){ void emOrdem(){
System.out.print("PreOrdem: ["); System.out.print("EmOrdem: [");
preOrdemAux(raiz); emOrdemAux(raiz);
System.out.println(" ]"); System.out.println(" ]");
} }
void preOrdemAux(Node raiz){ void emOrdemAux(Node raiz){
if(raiz !=null){ if(raiz !=null){
System.out.print(" "+raiz.nome); emOrdemAux(raiz.linke);
preOrdemAux(raiz.linke); System.out.print(" "+raiz.nome);
preOrdemAux(raiz.linkd); emOrdemAux(raiz.linkd);
} }
} }

Árvores Binárias Ordenadas Árvores Binárias Ordenadas


void posOrdem(){ String BuscaAux (Node raiz, String nm) {
System.out.print("PosOrdem: ["); if(raiz == null) {
posOrdemAux(raiz); return "não encontrou“; }
else {
System.out.println(" ]"); if(raiz.nome.compareTo(nm)>0) {
} return BuscaAux(raiz.linke, nm); }
void posOrdemAux(Node raiz){ else
if(raiz !=null){ if(raiz.nome.compareTo(nm)<0) {
return BuscaAux(raiz.linkd, nm); }
posOrdemAux(raiz.linke); else {
posOrdemAux(raiz.linkd); return raiz.fone; }
System.out.print(" "+raiz.nome); }
} }
}

Árvores Binárias Ordenadas Exercícios com listas


public static void main(String args [ ]) { 1. Para implementarmos uma pilha usando listas
ArvBinOrdFone a1 = new ArvBinOrdFone( ); encadeadas é necessário guardarmos somente a
a1.IncListaFone("Lidia","011 9999999"); referência inicial da lista como o topo da pilha.
a1.IncListaFone("Marcio","011 8888888"); Sendo assim para incluir um elemento na pilha
a1.IncListaFone("Marcelo","011 7777777");
basta criar um novo nodo incluí-lo na 1a. posição
da lista. Para retirar um elemento da pilha basta
a1.preOrdem( ); retirar o 1o. elemento da lista mantendo o próximo
a1.emOrdem( ); elemento como topo. Implemente os métodos
a1.posOrdem( ); push e pop considerando que a classe nodo com
String nm = "Marcelo"; um campo data do tipo int e um link já foi criada.
String fn = l1.BuscaFone(nm); - void push(Nodo topo, int elem)
} - int pop(Nodo topo)
}

2
30/10/2012

Exercícios com listas Exercícios com listas


2. Construa um método que retire a duplicidade 6. Altere o método do exercício 5 de forma que
de elementos de uma lista ordenada cuja este agora conte e retorne a quantidade de
referência é passada como parâmetro. elementos de uma lista circular.
3. Construa um método que transforme uma lista 7. Construa um método recursivo que mostre os
ligada convencional cuja referência é passada elementos de uma lista ligada convencional.
como parâmetro em uma lista circular. 8. Construa um método que mostre os elementos
4. Construa um método que concatene duas listas de uma lista ligada convencional do último para o
ligadas convencionais cujas referências são primeiro.
passadas como parâmetro. 9. Construa um método que mostre os elementos
5. Construa um método que conte e retorne a de duas listas ordenadas cujas referências são
quantidade de elementos de uma lista ligada cuja passadas como parâmetro, intercalados de
referência é passada como parâmetro. acordo com a ordem.

Exercícios com listas Exercícios com listas


10. Construa um método que crie uma nova lista 12. Considerando que os métodos next, destroy e isempty
já foram desenvolvidos codifique os métodos isfull para
retornando sua referência a partir da intercalação verificar se a fila circular está cheia e o método store para
de duas listas ordenadas cujas referências são inserir um elemento na fila.
passadas como parâmetro. 13. Considerando que os métodos destroy e isempty já
foram desenvolvidos codifique o método store para incluir
11. Considere uma coleção de elementos um elemento numa fila implementada com listas
dispostos em ordem num vetor e outra coleção de encadeadas onde a referência ao primeiro elemento é o
elementos armazenados em uma lista dinâmica front e a referência do último elemento da lista é o rear.
ordenada. Seria viável implementarmos um 14. Compare as implementações desenvolvidas nas
algoritmo de busca binária para as duas questões 12 e 13 quanto a espaço de memória e
velocidade dos algoritmos.
coleções? Justifique sua resposta.