Lista de Exercícios Resolvidos: Java | Python | VisuAlg | Portugol | C | C# | VB.NET | C++
Você está aqui: Java ::: Desafios e Lista de Exercícios Resolvidos ::: Estruturas de Dados - Árvores Binárias e Árvores Binárias de Busca

Como criar uma árvore binária de busca em Java a partir dos elementos de um vetor de inteiros - Desafio de Programação Resolvido em Java

Quantidade de visualizações: 593 vezes
Pergunta/Tarefa:

Escreva um programa Java que declara, constrói e inicializa o seguinte vetor de inteiros:

// vamos declarar um vetor de 10 inteiros
// sem repetição
int valores[] = {5, 1, 19, 7, 25, 8, 3, 40, 2, 6};
Uma vez criado o vetor de inteiros, crie um árvore binária de busca e insira todos os elementos do vetor na árvore, obedecendo a regra de que os valores menores que a raiz ou o nó pai deverão ser colocados à esquerda e os maiores à direita. Valores repetidos não são permitidos em uma árvore binária de busca.

Após a inserção dos elementos do vetor na árvore binária de busca, mostre todos os nós da árvore usando o percurso "em ordem". O percurso em ordem é 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 um método recursivo.

Sua saída deve ser parecida com:

Valores do array: [5, 1, 19, 7, 25, 8, 3, 40, 2, 6]
Valores na árvores binária: 1 2 3 5 6 7 8 19 25 40
Resposta/Solução:

Veja a resolução comentada deste exercício usando Java:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

package estudos;

import java.util.Arrays;

// classe interna para representar os nós da
// árvore binária
class No {
  int valor; // valor armazenado no nó
  No esquerdo; // filho esquerdo
  No direito; // filho direito
  
  // construtor do nó
  public No(int valor){
    this.valor = valor;
    this.esquerdo = null;
    this.direito = null;
  }
}

public class Estudos { 
  // referência para a raiz da árvore
  static No raiz;
  
  public static void main(String args[]){
    // vamos declarar um vetor de 10 inteiros
    // sem repetição
    int valores[] = {5, 1, 19, 7, 25, 8, 3, 40, 2, 6};
    
    // vamos mostrar os valores do vetor
    System.out.println("Valores do array: " + 
      Arrays.toString(valores));
    
    // vamos percorrer os valores do vetor e adicioná-los
    // à arvore binária
    for (int i = 0; i < valores.length; i++) {
      inserir(valores[i]);
    }
    
    // agora vamos exibir os valores já inseridos na
    // árvore binária usando o percurso "Em Ordem", que
    // devolve os nós da árvore ordenados em ordem
    // crescente
    System.out.print("Valores na árvores binária: ");
    em_ordem();
    System.out.println();
  }
  
  // função usada 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 static 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 No(valor); // cria um novo nó
    }
    else{
      // localiza o nó pai do novo nó
      No pai = null;
      No no_atual = raiz; // começa a busca pela raiz
   
      // enquanto o nó atual for diferente de null
      while(no_atual != null){
        // o valor sendo inserido é menor que o nó atual?
        if(valor < no_atual.valor) {
          pai = no_atual;
          // vamos inserir do lado esquerdo
          no_atual = no_atual.esquerdo;
        }
        // o valor sendo inserido é maior que o nó atual
        else if(valor > no_atual.valor){
          pai = no_atual;
          // vamos inserir do lado direito
          no_atual = no_atual.direito;
        }
        else{
          return false; // um nó com este valor foi encontrado
        }
      }
         
      // cria o novo nó e o adiciona como filho do nó pai
      if(valor < pai.valor){
         pai.esquerdo = new No(valor);
      }
      else{
        pai.direito = new No(valor);
      }
    }
  
    // retorna true para indicar que o novo nó foi inserido
    return true; 
  }

  // função que permite disparar a travessia em-ordem
  public static void em_ordem(){
    em_ordem(raiz);
  }
  
  // sobrecarga da função em ordem com uma parâmetro (esta é a versão 
  // recursiva da função)
  private static void em_ordem(No raiz){
    if(raiz == null){ // condição de parada
      return;
    }
      
    // visita a sub-árvore da esquerda
    em_ordem(raiz.esquerdo);
    // visita o nó atual
    System.out.print(raiz.valor + " ");
    // visita a sub-árvore da direita
    em_ordem(raiz.direito);
  }
}


Link para compartilhar na Internet ou com seus amigos:

Java ::: Desafios e Lista de Exercícios Resolvidos ::: Recursão (Recursividade)

Exercícios Resolvidos de Java - Uma função recursiva que conta quantas vezes um valor inteiro k ocorre em um vetor de inteiros

Quantidade de visualizações: 1639 vezes
Pergunta/Tarefa:

Escreva um método recursivo que conta quantas vezes um valor inteiro k ocorre em um vetor de 10 inteiros. Seu método deverá ter a seguinte assinatura:

public static int quantRepeticoes(int indice, int valor, int[] vetor){
  // sua implementação aqui
}
Sua aplicação deverá solicitar ao usuário os valores do vetor e o valor a ser pesquisado. Sua saída deverá ser parecida com:

Informe o 1 valor: 2
Informe o 2 valor: 7
Informe o 3 valor: 4
Informe o 4 valor: 7
Informe o 5 valor: 1

Informe o valor a ser pesquisado no vetor: 7
O valor informado se repete 2 vezes.
Resposta/Solução:

Veja a resolução comentada deste exercício usando Java console:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

package exercicio;

import java.util.Scanner;

public class Exercicio {
  public static void main(String[] args) {
    // cria um novo objeto da classe Scanner
    Scanner entrada = new Scanner(System.in);
    
    // vamos declarar um vetor de 10 inteiros
    int valores[] = new int[5];
    
    // vamos pedir ao usuário que informe os valores do vetor
    for(int i = 0; i < valores.length; i++){
      System.out.print("Informe o " + (i + 1) + " valor: ");
      // efetua a leitura do valor informado para a posição atual do vetor
      valores[i] = Integer.parseInt(entrada.nextLine());
    }
    
    // agora vamos pedir para informar o valor a ser pesquisado
    System.out.print("\nInforme o valor a ser pesquisado no vetor: ");
    int valor = Integer.parseInt(entrada.nextLine());
    
    // e vamos ver a quantidade de repetições
    int repeticoes = quantRepeticoes(0, valor, valores);
    System.out.print("O valor informado se repete " + repeticoes + " vezes.");
    
    System.out.println("\n");
  }
  
  // método recursivo que recebe um valor
  public static int quantRepeticoes(int indice, int valor, int[] vetor){
    if(indice == vetor.length - 1){ // caso base...hora de parar a recursividade
      if(vetor[indice] == valor){
        return 1; // mais um repetição foi encontrada
      }
    }
    else{ // dispara mais uma chamada recursiva
      if(vetor[indice] == valor){ // houve mais uma repetição
        return 1 + quantRepeticoes(indice + 1, valor, vetor);
      }
      else{
        return 0 + quantRepeticoes(indice + 1, valor, vetor); // não repetiu
      }
    }
    
    return 0; // só para deixar o compilador satisfeito...esta linha nunca é executada
  }
}



Java ::: Desafios e Lista de Exercícios Resolvidos ::: Arrays e Matrix (Vetores e Matrizes)

Exercício Resolvido de Java - Como percorrer todos os elementos de um vetor de inteiros e exibir a soma de seus valores

Quantidade de visualizações: 12979 vezes
Pergunta/Tarefa:

Considere o seguinte vetor de inteiros:

// um vetor de inteiros contendo sete elementos
int valores[] = {4, 5, 1, 8, 2, 2, 10};
Escreva um programa Java console ou GUI que usa um laço for para percorrer todos os elementos deste vetor e exibir a soma de seus valores. Seu programa deverá exibir uma saída com a mensagem:

A soma dos valores do vetor é: 32

Resposta/Solução:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

public static void main(String[] args){
  // um vetor de inteiros contendo sete elementos
  int valores[] = {4, 5, 1, 8, 2, 2, 10};
    
  // o primeiro passo é criar uma variável que vai receber a soma
  // dos valores dos elementos
  int soma = 0;

  // agora vamos usar uma laço for para percorrer todos os elementos
  // do vetor, obter o valor do elemento atual e adicionar ao valor atual
  // da variável soma
  for(int i = 0; i < valores.length; i++){
    soma = soma + valores[i];
    // poderia também ser escrito assim:
    // soma += valores[i];
  }

  // vamos exibir a soma dos valores do vetor
  System.out.println("A soma dos valores do vetor é: " + soma);
}



Java ::: Dicas & Truques ::: Mouse e Teclado

Computação Gráfica em Java - Código completo Java Swing para um programa de desenho usando eventos do mouse

Quantidade de visualizações: 31337 vezes
Nesta dica apresento um código completo para um programa de desenho usando os eventos os mouse, feito em Java Swing. Veja que o único evento que tivemos que implementar foi mouseDragged, que é disparado quando o usuário arrasta o mouse com o botão direito ou esquerdo pressionado. Observe também a criação de uma classe JPanel personalizada que servirá como painel de desenho.

Fique atento à forma como subscrevemos o método paintComponent() na classe PainelDesenho para obtermos o objeto Graphics que nos permitirá desenhar na superfície do JPanel.

O resultado é exibido na imagem abaixo:



E aqui está o código completo para o exemplo:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

package arquivodecodigos;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
 
public class Estudos extends JFrame{
  public Estudos(){
    super("Eventos do Mouse e Teclado");
 
    Container c = getContentPane();
    PainelDesenho painel = new PainelDesenho();
    c.add(painel, BorderLayout.CENTER);
    c.add(new JLabel("Arraste o mouse para desenhar..." ),
      BorderLayout.SOUTH );
     
    setSize(350, 250);
    setVisible(true);
  }
   
  public static void main(String args[]){
    Estudos app = new Estudos();
    app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }
}
 
class PainelDesenho extends JPanel{
  private int quantPontos = 0;
  private Point pontos[] = new Point[10000];
 
  public PainelDesenho(){
    this.setBackground(Color.WHITE);    
 
    this.addMouseMotionListener(
      new MouseMotionAdapter(){
        public void mouseDragged(MouseEvent e){
          if(quantPontos < pontos.length){
            pontos[quantPontos] = e.getPoint();
            quantPontos++;
            repaint();
          }                                              
        }                                
      }
    );
  }
 
  @Override
  public void paintComponent(Graphics g){
    super.paintComponent(g);
     
    for(int i = 0 ; i < quantPontos; i++)
      g.fillOval(pontos[i].x, pontos[i].y, 4, 4);
  }
}



Vamos testar seus conhecimentos em AutoCAD Civil 3D

Survey Points e COGO Points

Survey points não podem ser movidos ou editados sem acessar a base de dados do levantamento e sem usar comandos especializados para a edição de pontos de levantamento.

A) Verdadeiro

B) Falso
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em Fundações

Fundações diretas: tipos, características, métodos construtivos e cálculo das tensões no solo

Um engenheiro verificou um problema de projeto na planta em uma edificação de grande porte: os pilares estavam muito próximos entre si. Desta forma, ele precisaria indicar ao mestre de obra um tipo de fundação mais apropriado, para não acarretar um problema estrutural devido à aproximidade dos pilares. A partir desta informação, assinale a alternativa correta:

A) Radier.

B) Sapata associada.

C) Bloco.

D) Sapata de divisa.

E) Sapata corrida.
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em Python

Analise o seguinte código Python

a = {5, 8, 2, 1}
b = {1, 4, 5, 3}
c = a.intersection(b)
print(c)

Qual é o resultado de sua execução?

A) {1, 5}

B) Um erro de execução na linha 2

C) {5, 5, 1, 1}

D) {5, 8, 2, 1, 1, 4, 5, 3}
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em JavaScript

Qual das formas abaixo é válida para a declaração e inicialização de variáveis em JavaScript?

A) int a = 5;

B) declare a = 5;

C) var a = 5;

D) def a = 5;

E) variable a = 5;
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em Engenharia Civil - Instalações Hidráulicas Prediais

Sistema domiciliar de abastecimento de água

Se alguém mergulha numa piscina, a água exerce uma pressão sobre o corpo. Da mesma forma, a água exerce uma pressão sobre outros fluidos ou sobre uma superfície. Essa pressão não depende do volume de água contido em determinado recipiente, mas da altura do nível da água.

Assim, ao se dimensionar as tubulações, deve-se considerar as pressões máximas e mínimas que serão suportadas pelas tubulações. Dessa forma, a pressão máxima que a instalação de água fria pode apresentar durante o funcionamento dos aparelhos é:

Selecione a resposta:

A) 0,5mca.

B) 60mca.

C) 20mca.

D) 40mca.

E) 5mca.
Verificar Resposta Estudar Cards Todas as Questões

Desafios, Exercícios e Algoritmos Resolvidos de Java

Veja mais Dicas e truques de Java

Dicas e truques de outras linguagens

Códigos Fonte

Programa de Gestão Financeira Controle de Contas a Pagar e a Receber com Cadastro de Clientes e FornecedoresSoftware de Gestão Financeira com código fonte em PHP, MySQL, Bootstrap, jQuery - Inclui cadastro de clientes, fornecedores e ticket de atendimento
Diga adeus às planilhas do Excel e tenha 100% de controle sobre suas contas a pagar e a receber, gestão de receitas e despesas, cadastro de clientes e fornecedores com fotos e histórico de atendimentos. Código fonte completo e funcional, com instruções para instalação e configuração do banco de dados MySQL. Fácil de modificar e adicionar novas funcionalidades. Clique aqui e saiba mais
Controle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidadesControle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidades
Tenha o seu próprio sistema de controle de estoque web. com cadastro de produtos, categorias, fornecedores, entradas e saídas de produtos, com relatórios por data, margem de lucro e muito mais. Código simples e fácil de modificar. Acompanha instruções para instalação e criação do banco de dados MySQL. Clique aqui e saiba mais

Linguagens Mais Populares

1º lugar: Java
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: Delphi
6º lugar: C
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby



© 2024 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 45 usuários muito felizes estudando em nosso site.