Arvore Binaria [resolvido]

9 respostas
Odyo

Estou aprendendo o TAD Arvore Binaria apos aprender pilha, fila, fila de prioridades e etc … agora com o TAD Arvore estou tendo algumas dificuldades … !

A classe vai bem ate agora e aparentemente funciona, entretanto nao faco a menor ideia de como exibir os elementos da Arvore na tela …

alguma sugestao ?

9 Respostas

L
Odyo:
Estou aprendendo o TAD Arvore Binaria apos aprender pilha, fila, fila de prioridades e etc ... agora com o TAD Arvore estou tendo algumas dificuldades ... !

A classe vai bem ate agora e aparentemente funciona, entretanto nao faco a menor ideia de como exibir os elementos da Arvore na tela ....

alguma sugestao ?

Eu sei que a resposta é meio genêrica, mas é que tbm não conheço a estrutura da sua árvore, mas normalmente para exibir os elementos na tela é necessário utilizar recursão.

Não sei se vai te ajudar muito, pq a estrutura da árvore com certeza é diferente, mas segue um código que eu estou usando pra fazer isso:

public String toString(int depth, StringBuffer buf) {
		

		if (attributeName != null) {
			buf.append(Util.ntimes("\t",depth));
			buf.append(Util.ntimes("***",1));
			buf.append( attributeName + " \n");
			for (String attributeValue : nodes.keySet()) {
				buf.append(Util.ntimes("\t",depth+1));
				buf.append("+"+attributeValue );
				buf.append("\n");
				DecisionTree child = nodes.get(attributeValue);
				buf.append(child.toString(depth + 1, new StringBuffer()));
			}
		}


		return buf.toString();
	}
Raff

sujiro que pegue um livre de Estrutura de Dados e entenda o funcionamento de Arvores :slight_smile: falow ai amigo !!!

Getware

Quando estava estudando eu fiz esse codigo pra escrever no console a árvore binária, usei tb com uma b-tree com as devidas modificações:

private static void imprime(No pagina) {
        if (pagina == null) {
            System.out.print("-");
        } else {
            System.out.print("(");
            imprime(pagina.getFilhoDireita());
            System.out.print(" " + pagina.getChave() + " ");
            imprime(pagina.getFilhoEsquerda());
            System.out.print(")");
        }
    }

A saída fica assim:

((- 2 -) 3 (- 5 -))

Onde 3 é a raiz 2 é o filho da direita e 5 é o filho da esquerda.

Espero ter ajudado…
Flw.

Mantu

Suponho que os nós da sua árvore devam ter, basicamente, tres elementos:
-“Ponteiro” para o nó à esquerda (Chamemos de “left”)
-“Ponteiro” para o nó à direita (Chamemos de “right”)
-Valor do nó (Chamemos de “value”)

Para imprimir sua árvore você deverá realizar, em cada nó, no mínimo três ações, não necessariamente nesta ordem:
-Recuperar o value
-Visitar o left
-Visitar o right

A ordem em que você realiza estas três ações influencia na forma como são apresentados os dados armazenados na árvore. Se, por exemplo, você realizar as ações nesta ordem:
1)Visitar o left
2)Recuperar o value
3)Visitar o right
Você terá impresso os valores em ordem:
-Crescente, se os menores valores ficam à esquerda
-Decrescente, se os menores valores ficam à direita

Tente implementar essas idéias.
Quaquer coisa, poste mais.

Odyo

Valeu Mantu !
vou tentar implementar as ideias aqui e ver o que acontece !
depois posto o resultado.

:roll:

cassio

Só mais um comentário,

Não é obrigatório utilizar recursividade para visitar os nós. É só ir descendo enquanto left E right forem ambos diferentes de null. Isso tbm vai depender da sequência que você quer utilizar (caminhamento pré-ordem, pós-ordem ou central).

Odyo

Consegui fazer … ! utilizando recursividade mesmo …

ficou assim

public void mostra_crescente()
    {
        System.out.println(raiz);
    }
    
    public void mostra_crescente(NO temp)
    {

        if ( temp != null )
        {
            mostra_crescente(temp.esquerdo);
            System.out.println(temp.reg.chave);
            mostra_crescente(temp.direito);
        }
        
        
    }

[color=red] O que seria pos Ordem e pre ordem ???[/color]

neohacker

É o modo em que vc apenas imprime o valor chave da árvore, exemplo:

Pré-Ordem: Valor, Left, Right.
In-Ordem: Left, Valor, Right. (Árvore impressa ordenada em valor crescente)
Pós-Ordem: Left, Right, Valor.

lucianojs

Como ficaria este código caso não se usasse recursividade?

Tentei procurar algum exemplo na net e não achei.

Criado 8 de maio de 2007
Ultima resposta 8 de jun. de 2007
Respostas 9
Participantes 8