Você está aqui: Java ::: Desafios e Lista de Exercícios Resolvidos ::: Estruturas de Dados - Árvores Binárias e Árvores Binárias de Busca |
Travessia de uma árvore binária de busca usando o percurso em-ordem (in-order, In-ordem ou ordem simétrica) - Exercícios Resolvidos de JavaQuantidade de visualizações: 2926 vezes |
|
Pergunta/Tarefa: O percurso em ordem (em-ordem, in-order, In-ordem ou ordem simétrica) é usado quando queremos exibir os valores dos nós da árvore binária de busca em ordem ascendente. Neste tipo de percurso nós visitamos primeiramente a sub-árvore da esquerda, então o nó atual e finalmente a sub-árvore à direita do nó atual. É importante notar que esta travessia é feita por meio de uma função recursiva. Escreva um programa Java que contenha uma árvore binária de busca cujos nós guardarão, além das referências para o filho esquerdo e o filho direito, apenas um valor inteiro. Forneça uma função inserir() que permitirá inserir os valores na árvore. Em seguida forneça uma função recursiva que permitirá fazer a travessia in-order da árvore. Sua saída deverá ser parecida com: Informe um valor inteiro: 7 Informe um valor inteiro: 3 Informe um valor inteiro: 18 Informe um valor inteiro: 4 Informe um valor inteiro: 9 Percurso em ordem: 3 4 7 9 18 Veja a resolução comentada deste exercício usando Java: Código para NoArvore.java: ----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------
package estudos;
public class NoArvore {
int valor; // valor armazenado no nó
NoArvore esquerdo; // filho esquerdo
NoArvore direito; // filho direito
// construtor do nó
public NoArvore(int valor){
this.valor = valor;
}
}
Código para ArvoreBinariaBusca.java: ----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------
package estudos;
public class ArvoreBinariaBusca {
private NoArvore raiz; // referência para a raiz da árvore
// método usado para inserir um novo nó na árvore
// retorna true se o nó for inserido com sucesso e false
// se o elemento não puder ser inserido (no caso de já
// existir um elemento igual)
public boolean inserir(int valor){
// a árvore ainda está vazia?
if(raiz == null){
// vamos criar o primeiro nó e definí-lo como a raiz da árvore
raiz = new NoArvore(valor); // cria um novo nó
}
else{
// localiza o nó pai
NoArvore pai = null;
NoArvore noAtual = raiz; // começa a busca pela raiz
// enquanto o nó atual for diferente de null
while(noAtual != null){
if(valor < noAtual.valor) {
pai = noAtual;
noAtual = noAtual.esquerdo;
}
else if(valor > noAtual.valor){
pai = noAtual;
noAtual = noAtual.direito;
}
else{
return false; // um nó com este valor foi encontrado
}
}
// cria o novo nó e o adiciona ao nó pai
if(valor < pai.valor){
pai.esquerdo = new NoArvore(valor);
}
else{
pai.direito = new NoArvore(valor);
}
}
return true; // retorna true para indicar que o novo nó
// foi inserido
}
// método que permite disparar a travessia em-ordem
public void emOrdem(){
emOrdem(raiz);
}
// sobrecarga do método emOrdem com uma parâmetro (esta é a
// versão recursiva do método)
private void emOrdem(NoArvore raiz){
if(raiz == null){ // condição de parada
return;
}
// visita a sub-árvore da esquerda
emOrdem(raiz.esquerdo);
// visita o nó atual
System.out.print(raiz.valor + " ");
// visita a sub-árvore da direita
emOrdem(raiz.direito);
}
}
E aqui está o código para a classe que permite testar a árvore: ----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------
package estudos;
import java.util.Scanner;
public class Estudos {
public static void main(String[] args) {
Scanner entrada = new Scanner(System.in);
// vamos criar um novo objeto da classe ArvoreBinariaBusca
ArvoreBinariaBusca arvore = new ArvoreBinariaBusca();
// vamos inserir 5 valores na árvore
for(int i = 0; i < 5; i++){
System.out.print("Informe um valor inteiro: ");
int valor = Integer.parseInt(entrada.nextLine());
// vamos inserir o nó e verificar o sucesso da operação
if(!arvore.inserir(valor)){
System.out.println("Erro. Um elemento já contém este valor.");
}
}
// vamos exibir os nós da árvore usando o percurso em ordem
System.out.println("\nPercurso em ordem:");
arvore.emOrdem();
System.out.println("\n");
}
}
|
|
|
Mais Desafios de Programação e Exercícios e Algoritmos Resolvidos de Java |
Veja mais Dicas e truques de Java |
Dicas e truques de outras linguagens |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
|
1º lugar: Java |






