Alguem sabe algum método que faça isso?
Exemplo:
1
/ \
2 3
/ \ / \
4 5 6 7
É pra imprimir 1,2,3,4,5,6,7
VLW
Alguem sabe algum método que faça isso?
Exemplo:
1
/ \
2 3
/ \ / \
4 5 6 7
É pra imprimir 1,2,3,4,5,6,7
VLW
Também preciso de um método que implemente essa mesma idéia…
Da uma luz ai pessoal…
Valeuu
Não sei se intendi bem, mas parece facil. É só utilizar alguns printlines.
System.out.println("1");
System.out.println("/\");
System.out.println("2 3");
System.out.println("/\/\");
System.out.println("4567");
hehe…
Gostei da tentativa…
Mas o meu problema por exemplo já é diferente …
no meu caso é fazer uma consulta em um banco de dados que está estruturado em forma de arvore…
Categorias…Subcategorias
Pais…Filhos…
mas ainda não achei uma maneira de fazer isso…
Alguem pode ajudar…???
Bom, no caso eu intendi errado…rs :oops:
Desculpe-me.
Eu passo a pergunta para alguem mais gabaritado!
Não cara… não é println nao… kkkkkk mas vlw
É uma estrutura de dados… na verdade é uma árvore AVL… ai depois que ela está estruturada daquela maneira é necessario que se imprima os valores dos nos nivel por nivel como eu expliquei
[quote=Oliveira_SP]Não sei se intendi bem, mas parece facil. É só utilizar alguns printlines.
System.out.println("1");
System.out.println("/\");
System.out.println("2 3");
System.out.println("/\/\");
System.out.println("4567");
[/quote]
UHAEUHAEUHAUHEEAUHEHUAEUHAEUHEAHUEAHU !!!
essa foi muito boa cara
Mas vai usar recursividade galera…
É um algoritmo para percorrer a arvore chamado pré-ordem =) (ele é recursivo)
Vou tentar explicar:
farei pseudo-codigo:
procedimento preordem(no)
se (no != null) entao
imprime(no.informacao);
preordem(nodaesquerda);
preordem(nodadireita);
fim do se
Mole não ??
isso imprime 1,2,3,4,5,6,7
Facam o teste de mesa…
Abraços,
Renan
e ai
acho que você pode usar a busca em largura.
não sei se eu entendi tb … hehehe … mais ou menos assim …
[code]
void Percorre() {
LinkedList fila = new LinkedList();
fila.add(ROOT);
while(fila.size() != 0) {
NO r = fila.remove();
System.out.println(r.Numero + " ");
if(r->FilhoEsq != null) fila.add(r->FilhoEsq);
if(r->FilhoDir != null) fila.add(r->FilhoDir);
}
}
public class NO {
int Numero;
NO FilhoEsq = null;
NO FilhoDir = null;
}[/code]
Pelo menos eu tentei =D
Um dia eu aprendo
Eu implementei isso uma vez usando funçao recursiva.
lia todos os registros do banco (usando alguns where’s é claro)
jogava isso num array
lia com funçao recursiva o array para montar a arvore…
não é a forma mais eficiente (creio eu, não parei para pensar em outra forma depois) mas funciona.
[quote=renan_][quote=Oliveira_SP]Não sei se intendi bem, mas parece facil. É só utilizar alguns printlines.
System.out.println("1");
System.out.println("/\");
System.out.println("2 3");
System.out.println("/\/\");
System.out.println("4567");
[/quote]
UHAEUHAEUHAUHEEAUHEHUAEUHAEUHEAHUEAHU !!!
essa foi muito boa cara
Mas vai usar recursividade galera…
É um algoritmo para percorrer a arvore chamado pré-ordem =) (ele é recursivo)
Vou tentar explicar:
farei pseudo-codigo:
procedimento preordem(no)
se (no != null) entao
imprime(no.informacao);
preordem(nodaesquerda);
preordem(nodadireita);
fim do se
Mole não ??
isso imprime 1,2,3,4,5,6,7
Facam o teste de mesa…
Abraços,
Renan[/quote]
Não creio que em pré ordem isso funciona… em pré ordem sairia, 1,2,4,5,3,6,7
[quote=renan_][quote=Oliveira_SP]Não sei se intendi bem, mas parece facil. É só utilizar alguns printlines.
System.out.println("1");
System.out.println("/\");
System.out.println("2 3");
System.out.println("/\/\");
System.out.println("4567");
[/quote]
UHAEUHAEUHAUHEEAUHEHUAEUHAEUHEAHUEAHU !!!
essa foi muito boa cara
Mas vai usar recursividade galera…
É um algoritmo para percorrer a arvore chamado pré-ordem =) (ele é recursivo)
Vou tentar explicar:
farei pseudo-codigo:
procedimento preordem(no)
se (no != null) entao
imprime(no.informacao);
preordem(nodaesquerda);
preordem(nodadireita);
fim do se
Mole não ??
isso imprime 1,2,3,4,5,6,7
Facam o teste de mesa…
Abraços,
Renan[/quote]
Na verdade esse algoritmo imprime 1,2,4,5,3,6,7.
Facam as devidas mudancas.
Att,
Renan
Isso mesmo Oliveira…Oque importa é tentar ajudar,
nao importa como…
continua assim cara…
Eu to tentando verificar as dicas do pessoal ai pra tentar resolver o meu problema da recursividade …
UHAEUHAEUHAUHEEAUHEHUAEUHAEUHEAHUEAHU !!!
essa foi muito boa cara
Mas vai usar recursividade galera…
É um algoritmo para percorrer a arvore chamado pré-ordem =) (ele é recursivo)
Vou tentar explicar:
farei pseudo-codigo:
view plaincopy to clipboardprint?
procedimento preordem(no)
se (no != null) entao
imprime(no.informacao);
preordem(nodaesquerda);
preordem(nodadireita);
fim do se
procedimento preordem(no)
se (no != null) entao
imprime(no.informacao);
preordem(nodaesquerda);
preordem(nodadireita);
fim do se
Mole não ??
isso imprime 1,2,3,4,5,6,7
Facam o teste de mesa…
Abraços,
Renan
Na verdade esse algoritmo imprime 1,2,4,5,3,6,7.
Facam as devidas mudancas.
Att,
Renan
raffccc 11/12/2007 20:59:59 Assunto: Re:Imprimir árvore por nível
renan_ wrote:
Oliveira_SP wrote:
Não sei se intendi bem, mas parece facil. É só utilizar alguns printlines.
view plaincopy to clipboardprint?
System.out.println(“1”);
System.out.println("/\");
System.out.println(“2 3”);
System.out.println("/\/\");
System.out.println(“4567”);
System.out.println(“1”);
System.out.println("/\");
System.out.println(“2 3”);
System.out.println("/\/\");
System.out.println(“4567”);
UHAEUHAEUHAUHEEAUHEHUAEUHAEUHEAHUEAHU !!!
essa foi muito boa cara
Mas vai usar recursividade galera…
É um algoritmo para percorrer a arvore chamado pré-ordem =) (ele é recursivo)
Vou tentar explicar:
farei pseudo-codigo:
view plaincopy to clipboardprint?
procedimento preordem(no)
se (no != null) entao
imprime(no.informacao);
preordem(nodaesquerda);
preordem(nodadireita);
fim do se
procedimento preordem(no)
se (no != null) entao
imprime(no.informacao);
preordem(nodaesquerda);
preordem(nodadireita);
fim do se
Mole não ??
isso imprime 1,2,3,4,5,6,7
Facam o teste de mesa…
Abraços,
Renan
[quote]Não creio que em pré ordem isso funciona… em pré ordem sairia, 1,2,4,5,3,6,7
Eu implementei isso uma vez usando funçao recursiva.
lia todos os registros do banco (usando alguns where’s é claro)
jogava isso num array
lia com funçao recursiva o array para montar a arvore…
não é a forma mais eficiente (creio eu, não parei para pensar em outra forma depois) mas funciona. [/quote]
Na verdade eu até bolei uma solucao manulando um array como o nosso amigo citou antes aii…
Mas gostaria de algo para nao precisar fazer isso…
fazendo com que ficasse com níveis ilimitados
A arvore em questao nao se trata de uma arvore de busca binária . Será necessario um condicional verificando quem é maior que quem ( if(esquerda>direita) ) … Algo assim para se conseguir imprimir da forma que deseja.
Att,
Renan
entaum kra…eu fiz aki mas em pascal…vou postar o algoritmo espero q te seja util…adapte-o conforme precisar
eu usei duas filas…a Fila F é a q irá armazenar o valor pra posteriormente serem exibidos, no seu caso, e a Fila FE é a Fila q auxiliará para andarmos na arvore. No fim vc terá a Fila F, preenchida pelos niveis, ai é só exibi-la
Espero ter ajudado, e naum ter problema em colocar procedimentos em pascal aki… :oops:
Procedure TransLista(var raiz:tree);
var F,FE:TpFila;
begin
Init(F);
Init(FE);
Enqueue(F,raiz); {Empilha F}
Enqueue(FE,raiz); {Empilha FE}
while not IsEmpty(FE) do
begin
Dequeue(FE,raiz); {Desempilha FE}
if (raiz^.esq<>nil) then
begin
Enqueue(F,raiz^.esq); {Empilha F}
Enqueue(FE,raiz^.esq);{Empilha FE}
end;
if (raiz^.dir<>nil ) then
begin
Enqueue(F,raiz^.dir); {Empilha F}
Enqueue(FE,raiz^.dir);{Empilha FE}
end;
end;
end;
Pré-ordem não imprime isso do jeito que vc quer não. Aplique o pré-order mentalmente nessa árvore que vc colocou como exemplo e vc vai ver que ele imprime todos os nodos à esquerda da árvore, antes de imprimir os da direita.
O que vc realmente quer é uma pesquisa em largura (ou breadth-first search), que imprime todos os nodos pais antes de imprimir os seus filhos, ou seja, imprime um nível da árvore de cada vez. É fácil descobrir como implementar esse algorítmo. Google it.