Você está aqui: Cards de |
||
|
||
|
|
||
Java ::: Estruturas de Dados ::: Árvore Binária e Árvore Binária de Busca |
Estruturas de dados em Java - Como fazer a travessia de uma árvore binária de busca em Java usando o percurso em-ordem (in-order, In-ordem ou ordem simétrica)Quantidade de visualizações: 5424 vezes |
Antes de discutirmos o percurso in-order, veja a árvore binária de busca na figura abaixo:![]() Esta árvore possui 9 nós e obedece à regra de que os nós com valores menores que o nó pai ficam à sua esquerda, e aqueles com nós maiores que o nó pai, ficam à sua direita. 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. Veja o código completo para o exemplo: Código para No.java:
package arvore_binaria;
public class No {
private int valor; // valor armazenado no nó
private No esquerdo; // filho esquerdo
private No direito; // filho direito
// construtor do nó
public No(int valor){
this.valor = valor;
this.esquerdo = null;
this.direito = null;
}
public int getValor() {
return valor;
}
public void setValor(int valor) {
this.valor = valor;
}
public No getEsquerdo() {
return esquerdo;
}
public void setEsquerdo(No esquerdo) {
this.esquerdo = esquerdo;
}
public No getDireito() {
return direito;
}
public void setDireito(No direito) {
this.direito = direito;
}
}
Código para ArvoreBinariaBusca.java:
package arvore_binaria;
public class ArvoreBinariaBusca {
private No 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 No(valor); // cria um novo nó
}
else{
// localiza o nó pai do novo nó
No pai = null;
No noAtual = raiz; // começa a busca pela raiz
// enquanto o nó atual for diferente de null
while(noAtual != null){
// o valor sendo inserido é menor que o nó atual?
if(valor < noAtual.getValor()) {
pai = noAtual;
// vamos inserir do lado esquerdo
noAtual = noAtual.getEsquerdo();
}
// o valor sendo inserido é maior que o nó atual
else if(valor > noAtual.getValor()){
pai = noAtual;
// vamos inserir do lado direito
noAtual = noAtual.getDireito();
}
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.getValor()){
pai.setEsquerdo(new No(valor));
}
else{
pai.setDireito(new No(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(No raiz){
if(raiz == null){ // condição de parada
return;
}
// visita a sub-árvore da esquerda
emOrdem(raiz.getEsquerdo());
// visita o nó atual
System.out.print(raiz.getValor() + " ");
// visita a sub-árvore da direita
emOrdem(raiz.getDireito());
}
}
E agora o código para a classe principal:
package arvore_binaria;
import java.util.Scanner;
public class ArvoreBinariaTeste {
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 9 valores na árvore
for(int i = 0; i < 9; 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("Não foi possível inserir." +
" Um elemento já contém este valor.");
}
}
// vamos exibir os nós da árvore usando o percurso in-order
System.out.println("\nPercurso in-order:");
arvore.emOrdem();
System.out.println("\n");
}
}
Ao executar este código teremos o seguinte resultado: Informe um valor inteiro: 8 Informe um valor inteiro: 3 Informe um valor inteiro: 10 Informe um valor inteiro: 1 Informe um valor inteiro: 6 Informe um valor inteiro: 14 Informe um valor inteiro: 4 Informe um valor inteiro: 7 Informe um valor inteiro: 13 Percurso in-order: 1 3 4 6 7 8 10 13 14 |
C# ::: Dicas & Truques ::: Arrays e Matrix (Vetores e Matrizes) |
Como inverter um array em C# usando a função Reverse() - Vetores e matrizes em C#Quantidade de visualizações: 17594 vezes |
|
Nesta dica mostrarei como podemos usar o método estático Reverse() da classe Array do C# para inverter a ordem dos elementos de um array (vetor). Note que este método, por ser estático, modifica o vetor passado como argumento. Veja o código completo para o exemplo:
using System;
namespace Estudos{
class Program{
static void Main(string[] args) {
// cria e inicializa um array de strings
string[] cidades = {"Goiânia", "São Paulo",
"Rio de Janeiro", "Curitiba"};
Console.WriteLine("Ordem original:");
for (int i = 0; i < cidades.Length; i++)
Console.WriteLine(cidades[i]);
// inverte a ordem dos elementos
Array.Reverse(cidades);
// exibe os elementos na ordem inversa
Console.WriteLine();
Console.WriteLine("Ordem inversa:");
for (int i = 0; i < cidades.Length; i++)
Console.WriteLine(cidades[i]);
Console.WriteLine("\n\nPressione uma tecla para sair...");
Console.ReadKey();
}
}
}
Ao executar este código nós teremos o seguinte resultado: Ordem original: Goiânia São Paulo Rio de Janeiro Curitiba Ordem inversa: Curitiba Rio de Janeiro São Paulo Goiânia |
Java ::: Desafios e Lista de Exercícios Resolvidos ::: Java Básico |
Exercícios Resolvidos de Java - Ler um número de três dígitos, separá-lo e invertê-lo, escrevendo o número lido e sua forma inversaQuantidade de visualizações: 16370 vezes |
|
Exercício Resolvido de Java - Ler um número de três dígitos, separá-lo e invertê-lo, escrevendo o número lido e sua forma inversa Pergunta/Tarefa: Escreva um programa Java console ou GUI que leia um número de 3 dígitos e o inverta, escrevendo o número lido e o invertido. Por exemplo, se o usuário informar o valor 753, seu programa deverá invertê-lo, resultando em 357. Seu programa deverá exibir a seguinte saída: Informe um valor inteiro de três dígitos: 753 O valor original é: 753 O valor invertido é: 357 Veja a resolução comentada deste exercício usando Java console:
public static void main(String[] args){
// não se esqueça de adicionar um import para a classe Scanner
// import java.util.Scanner;
// vamos criar um objeto da classe Scanner
Scanner entrada = new Scanner(System.in);
// vamos solicitar ao usuário que informe um valor inteiro
// na faixa 100 a 999 (incluindo)
System.out.print("Informe um valor inteiro de três dígitos: ");
// vamos ler o valor informado
int valor = Integer.parseInt(entrada.next());
// vamos verificar se o valor está na faixa permitida
if(valor < 100 || valor > 999){
System.out.println("Valor fora da faixa permitida");
System.exit(0);
}
// vamos criar uma variável temporária para manter intacto o valor lido
int temp = valor;
int inverso = 0; // guardará o valor invertido
// vamos inverter o valor agora
while(temp != 0){
inverso = (inverso * 10) + (temp % 10);
temp = temp / 10;
}
// vamos mostrar o resultado
System.out.println("O valor original é: " + valor);
System.out.println("O valor invertido é: " + inverso);
}
|
Java ::: Desafios e Lista de Exercícios Resolvidos ::: Java Básico |
Exercícios Resolvidos de Java - Um programa que lê um salário e concede um aumento de 20% para os salários inferiores a R$ 800,00Quantidade de visualizações: 5112 vezes |
|
Exercícios Resolvidos de Java - Um programa que lê um salário e concede um aumento de 20% para os salários inferiores a R$ 800,00 Pergunta/Tarefa: A empresa XYZ decidiu conceder um aumento de 20% aos funcionários com salários inferiores a R$ 800,00. Faça um programa Java que solicita o salário do funcionário e mostre o valor do salário reajustado ou uma mensagem, caso o funcionário não tenha direito ao aumento. Sua saída deverá ser parecida com: Informe o salário: 520 O salário informado foi: 520.0 O salário reajustado é: 530.4 Veja a resolução comentada deste exercício usando Java:
package estudos;
import java.util.Scanner;
public class Estudos {
public static void main(String[] args) {
Scanner entrada = new Scanner(System.in);
// vamos solicitar o salário do funcionário
System.out.print("Informe o salário: ");
double salario = Double.parseDouble(entrada.nextLine());
System.out.println("O salário informado foi: " + salario);
// vamos conceder o aumento ao salário inferior a 800,00
if(salario < 800.00){
double novoSalario = salario + (salario * (2.0 / 100.00));
System.out.println("O salário reajustado é: " + novoSalario);
}
else{
System.out.println("Não tem direito ao reajuste.");
}
System.out.println("\n");
}
}
|
Ruby ::: Dicas & Truques ::: Arrays e Matrix (Vetores e Matrizes) |
Como remover elementos repetidos de um array em Ruby usando as funções uniq e uniq!Quantidade de visualizações: 10633 vezes |
|
Em algumas situações nós precisamos excluir os itens duplicados de um array em Ruby. Para isso nós podemos usar as funções uniq e uniq!. A função uniq remove os itens duplicados e retorna um novo array, enquanto uniq! opera no array original, ou seja, modificando seus valores. Veja o código Ruby completo para o exemplo: # Cria um array de inteiros com duplicações valores = [2, 3, 3, 5, 5, 6, 3] # Exibe os valores do array original puts "Os valores do array são:\n" valores.each do | valor | print valor.to_s + " " end # Obtém um novo array sem as duplicações valores2 = valores.uniq puts "\n\nO novo array sem repetições:\n" valores2.each do | valor | print valor.to_s + " " end # Remove as duplicações do array original valores.uniq! puts "\n\nO array original sem repetições:\n" valores.each do | valor | print valor.to_s + " " end Ao executar este código Ruby nós teremos o seguinte resultado: Os valores do array são: 2 3 3 5 5 6 3 O novo array sem repetições: 2 3 5 6 O array original sem repetições: 2 3 5 6 |
Desafios, Exercícios e Algoritmos Resolvidos de Ruby |
Veja mais Dicas e truques de Ruby |
Dicas e truques de outras linguagens |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
|
1º lugar: Java |





