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 Java

Quantidade de visualizações: 1934 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
Resposta/Solução:

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");
  }
}


Link para compartilhar na Internet ou com seus amigos:

C++ ::: Fundamentos da Linguagem ::: Estruturas de Controle

Como usar o laço do...while da linguagem C++ - Apostila C++ para iniciantes

Quantidade de visualizações: 24333 vezes
O laço do..while é usado quando queremos executar um bloco de códigos repetidamente ENQUANTO uma condição for satisfeita. Porém, ao contrário do laço while, o laço do..while é sempre executado no mínimo uma vez, visto que a condição é testada antes da segunda interação, ou seja, o teste só ocorre no final da interação atual. Veja:

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

do{
  bloco de instruções
}while(condição);

Veja um exemplo de um laço do..while que conta de 10 à 0:

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

#include <string>
#include <iostream>

using namespace std;

int main(int argc, char *argv[]){
  // um laço do..while que conta de
  // 10 até 0
  int valor = 10;

  do{
    cout << valor << "\n";
    valor--;
  }while(valor >= 0);

  cout << "\n\n";

  system("PAUSE"); // pausa o programa
  return EXIT_SUCCESS;
}



C++ ::: Dicas & Truques ::: Trigonometria - Funções Trigonométricas

Como calcular o comprimento da hipotenusa em C++ dadas as medidas do cateto oposto e do cateto adjascente

Quantidade de visualizações: 1795 vezes
Nesta dica mostrarei como é possível usar a linguagem C++ para retornar o comprimento da hipotenusa dadas as medidas do cateto oposto e do cateto adjascente. Vamos começar analisando a imagem a seguir:



Veja que, nessa imagem, eu já coloquei os comprimentos da hipotenusa, do cateto oposto e do cateto adjascente. Para facilitar a conferência dos cálculos, eu coloquei também os ângulos theta (que alguns livros chamam de alfa) e beta já devidamente calculados.

Então, sabendo que o quadrado da hipotenusa é igual à soma dos quadrados dos catetos (Teorema de Pitógoras):

\[c^2 = a^2 + b^2\]

Tudo que temos a fazer a converter esta fórmula para código C++. Veja:

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

#include <iostream>
#include <math.h>
#include <cstdlib>
 
using namespace std;
 
int main(int argc, char *argv[]){
  float a = 20; // medida do cateto oposto
  float b = 30; // medida do cateto adjascente
  
  // agora vamos calcular o comprimento da hipotenusa
  float c = sqrt(pow(a, 2) + pow(b, 2));
 
  // e mostramos o resultado
  cout << "O comprimento da hipotenusa é: " << c << "\n\n";
	 
  system("PAUSE"); // pausa o programa
  return EXIT_SUCCESS;
}

Ao executar este código C++ nós teremos o seguinte resultado:

O comprimento da hipotenusa é: 36.0555

Como podemos ver, o resultado retornado com o código C++ confere com os valores da imagem apresentada.


C# ::: Windows Forms ::: ListBox

Como ordenar alfabeticamente os itens de uma ListBox do C# Windows Forms usando a propriedade Sorted

Quantidade de visualizações: 10168 vezes
Os itens de uma ListBox podem ser ordenados alfabeticamente definindo-se o valor True para a propriedade Sorted. Em tempo de execução este propriedade pode ser alterada da seguinte forma:

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

private void button2_Click(object sender, EventArgs e){
  // Ordena os itens da lista alfabeticamente
  listBox1.Sorted = true;
}

Esta propriedade pode também ser obtida enquanto o programa estiver em execução. Veja um trecho de código no qual clicamos em um botão e exibimos uma mensagem com o valor da propriedade Sorted da ListBox:

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

private void button1_Click(object sender, EventArgs e) {
  // Obtém o valor da propriedade Sorted
  MessageBox.Show("Valor da propriedade Sorted: " +   listBox1.Sorted);
}

Ao executarmos este código C# nós teremos o seguinte resultado:

Valor da propriedade Sorted: True


HTML5 ::: HTML5 + JavaScript ::: Geolocation API

Como usar a API Geolocation do HTML5

Quantidade de visualizações: 1564 vezes
A API Geolocation foi uma das adições mais importantes ao HTML5. Por meio desta API, os usuários podem compartilhar sua localização com seus sites favoritos. Um código JavaScript pode, por exemplo, capturar sua latitude e longitude, enviar para o backend de um servidor web e permitir que algumas aplicações façam coisas tais como encontrar lojas e locais mais próximos de você ou até mesmo mostrar sua localização em um mapa.

Nos dias atuais (março de 2020), a maioria dos navegadores web e dispositivos móveis (celulares, computadores de bordo de veículos, etc) dão suporte à API Geolocation. É claro que, antes de usá-la, temos que estar atentos à algumas considerações:

1) A localização mais precisa é aquela fornecida por um GPS, e este geralmente não está presente em laptops ou desktop. No entanto, alguns sistemas operacionais possuem a capacidade de obter tal localização se você estiver usando posicionamento de WI-FI e também por meio do seu endereço IP (Internet Protocol).

2) O usuário poderá se recusar a fornecer sua localização. Assim, fique atento a este fato e teste sempre a existência da API Geolocation e também a concordância do usuário antes de efetuar alguma ação crucial nas suas aplicações.

3) Alguns navegadores web restringem o acesso à API Geolocation somente em ambiente HTTPs. Fique atento a este detalhe também.

Vamos agora ver um trecho de código JavaScript que verifica a existência da API Geolocation no navegador:

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

<html>
<head>
  <title>Testando a existência da API Geolocation</title>
</head>
<body>

<script type="text/javascript">
  if(window.navigator.geolocation) {
    window.alert("A API Geolocation foi encontrada.");
  }
  else{
    window.alert("A API Geolocation não foi encontrada neste navegador.");   
  }
</script>

</body>
</html>

Notem que o novo objeto geolocation foi adicionado ao objeto navigator, já existente nos navegadores desde suas primeiras versões, e tudo que fizemos foi testar a existência de tal objeto.

Pronto! Agora que já sabemos para que serve a API Geolocation e como verificar a existência do objeto geolocation, o passo seguinte é aprender como detectar a latitude e longitude do usuário. Nesta seção você encontrará mais dicas relacionadas a isso.


Ruby ::: Dicas & Truques ::: Data e Hora

Como retornar os minutos em Ruby a partir de um objeto da classe Time usando a função min

Quantidade de visualizações: 6095 vezes
Muitas vezes precisamos obter os minutos de uma determinada hora a partir de um determinado objeto Time. Para isso a classe Time nos fornece o método min. Este método retorna um número inteiro na faixa 0..59.

Veja uma demonstração de como usar este método no trecho de código a seguir:

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

# constrói um objeto Time com a data e hora atual
agora = Time.now

# obtém os minutos
minutos = agora.min

# exibe o resultado
puts "Os minutos são: " + minutos.to_s

Ao executar este código Ruby nós teremos o seguinte resultado:

Os minutos são: 7


Desafios, Exercícios e Algoritmos Resolvidos de Ruby

Veja mais Dicas e truques de Ruby

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á 78 usuários muito felizes estudando em nosso site.