Arvore Binaria [resolvido]

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 ?

[quote=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 ? [/quote]

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:

[code]
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();
}[/code]
1 curtida

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

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.

1 curtida

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.

1 curtida

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

:roll:

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).

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]

É 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.

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

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