Você está aqui: JavaScript ::: Estruturas de Dados ::: Árvore Binária e Árvore Binária de Busca |
Estruturas de dados em JavaScript - Como pesquisar um nó em uma árvore binária de busca usando um método recursivo em JavaScriptQuantidade de visualizações: 1463 vezes |
Nesta dica mostrarei um exemplo completo de como pesquisar um valor em uma árvore binária de busca em JavaScript. Note que o exemplo usa apenas valores numéricos, mas você não terá dificuldades para modificar a classe Nó para os dados que você precisar. Vamos começar com a classe No, ou seja, a classe que representa os nós da árvore binária e que contém o valor numérico e também as referências para os nós esquerdo e direito. Código para No.js: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- // implementação da classe No class No{ // construtor do nó constructor(valor){ this.valor = valor; // valor do nó this.esquerdo = null; // filho esquerdo this.direito = null; // filho direito } } Agora que já temos a classe No devidamente colocada em um arquivo .js separado, vamos criar a classe ArvoreBinariaBusca. Veja: Código para ArvoreBinariaBusca.js: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- // implementação da classe ArvoreBinariaBusca class ArvoreBinariaBusca{ raiz = null; // 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) inserir(valor){ // a árvore ainda está vazia? if(this.raiz == null){ // vamos criar o primeiro nó e definí-lo como // a raiz da árvore this.raiz = new No(valor); // cria um novo nó } else{ // localiza o nó pai do novo nó var pai = null; var noAtual = this.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.valor) { pai = noAtual; // vamos inserir do lado esquerdo noAtual = noAtual.esquerdo; } // o valor sendo inserido é maior que o nó atual else if(valor > noAtual.valor){ pai = noAtual; // vamos inserir do lado direito noAtual = noAtual.direito; } else{ // um nó com este valor foi encontrado return false; } } // 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; } // método que permite pesquisar na árvore // binária de busca pesquisar(valor){ // chama a versão recursiva do método return this.pesquisarRec(this.raiz, valor); } // outra versão do método pesquisar que possui dois // parâmetros (esta é a versão recursiva do método) pesquisarRec(noAtual, valor){ // o valor pesquisado não foi encontrado. Vamos // retornar null if(noAtual == null){ return null; } // o valor pesquisado foi encontrado? if(valor == noAtual.valor){ return noAtual; // retorna o nó atual } // ainda não encontramos...vamos disparar uma nova // chamada para a sub-árvore da esquerda else if(valor < noAtual.valor){ return this.pesquisarRec(noAtual.esquerdo, valor); } // ainda não encontramos...vamos disparar uma nova // chamada para a sub-árvore da direita else{ return this.pesquisarRec(noAtual.direito, valor); } } } // fim classe Arvore E finalmente o código para a página HTML que contém uma função JavaScript que permite testar a árvore binária de busca: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- <html> <head> <title>Árvore Binária de Busca em JavaScript</title> </head> <body onload="testarArvore()"> <script type="text/javascript"> function testarArvore(){ // vamos criar um novo objeto da classe ArvoreBinariaBusca arvore = new ArvoreBinariaBusca(); // vamos inserir 5 valores na árvore arvore.inserir(8); arvore.inserir(43); arvore.inserir(2); arvore.inserir(18); arvore.inserir(71); var valorPesquisa = 18; // obtém um objeto da classe NoArvore a partir do // método pesquisar() da classe ArvoreBinariaBusca var res = arvore.pesquisar(valorPesquisa); // o valor foi encontrado? if(res != null){ document.writeln("O valor foi encontrado na árvore"); } else{ document.writeln("O valor não foi encontrado na árvore"); } } </script> <!-- faz o import das classes No e ArvoreBinariaBusca //--> <script src="No.js"></script> <script src="ArvoreBinariaBusca.js"></script> </body> </html> |
Link para compartilhar na Internet ou com seus amigos: |
JavaScript ::: Dicas & Truques ::: Arrays e Matrix (Vetores e Matrizes) |
Como retornar o índice da primeira ocorrência de um elemento em um array do JavaScript usando a função indexOf()Quantidade de visualizações: 2282 vezes |
Em algumas ocasiões nós precisamos obter e retornar o índice da primeira ocorrência de um determinado elemento em um array JavaScript. Para isso podemos usar a funções indexOf(). Se o elemento não puder ser encontrado, o valor -1 é retornado. Veja um exemplo de seu uso: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- <script type="text/javascript"> var valores = new Array(1, 2, 3, 2, 2, 4, 5); // vamos obter o índice da primeira ocorrência // do elemento com o valor 2 var indice = valores.indexOf(2); window.alert("Elemento encontrado no índice: " + indice); </script> Execute o código e veja que o elemento foi encontrado no índice 1, ou seja, na segunda posição do array, já que os índices de vetor e matriz em JavaScript começam a partir de 0. Experimente pesquisar o valor 50 e verá que o valor retornado é -1, indicando que o elemento não foi encontrado. |
JavaScript ::: Dicas & Truques ::: Arrays e Matrix (Vetores e Matrizes) |
Como testar se todos os elementos de um array satisfazem uma condição em JavaScript usando a função every()Quantidade de visualizações: 1401 vezes |
Em algumas situações nós gostaríamos de testar todos os elementos de um vetor e verificar se todos eles passam em um determinado teste. Para isso podemos usar a função every(), adicionada à linguagem JavaScript por meio do ECMAScript 5 (JavaScript 5, ECMAScript 2009, ES5). Este método nos permite fornecer uma função de callback que será chamada para cada um dos elementos do vetor. E o retorno do método every() é um valor true se todos os elementos passarem no teste e false em caso contrário. Veja um exemplo no qual testamos se TODOS os elementos de um vetor são maiores que 10: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- <script type="text/javascript"> function testarTodos(valor, indice, vetor){ if(valor > 10){ return true; } } var valores = new Array(21, 50, 30, 70, 12, 3); // vamos verificar se TODOS os valores são // maiores que 10 var res = valores.every(testarTodos); window.alert("Todos passaram no teste: " + res); </script> Aqui o resultado será false, pois o valor 3 não passou no teste. É importante observar que, assim que a função de callback retorna false pela primeira vez, o método every() já abandona sua execução. Uma função passada para o método every() pode conter os seguintes argumentos (nessa mesma ordem): a) O valor do item; b) O índice do item (opcional); c) O vetor a partir do qual o método every() está sendo chamado (opcional). Como última observação, o método every() não modifica o array original. |
JavaScript ::: Dicas & Truques ::: Data e Hora |
Como retornar a hora em JavaScript usando a função getHours() do objeto DateQuantidade de visualizações: 7024 vezes |
Em várias situações nós precisamos obter as horas a partir de um objeto Date do JavaScript. Para isso nós podemos efetuar uma chamada à sua função getHours(), que retorna um valor que vai de 0 até 23. Veja 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) ---------------------------------------------------------------------- <html> <head> <title>Estudando JavaScript</title> </head> <body> <script type="text/javascript"> var data = new Date(); var hora = data.getHours(); document.write("O valor da hora é: " + hora); </script> </body> </html> Ao executar este código JavaScript nós teremos o seguinte resultado: O valor da hora é: 14 |
Vamos testar seus conhecimentos em Python |
A coleção Set da linguagem Python permite itens repetidos. A) Verdadeiro B) Falso Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em Ética e Legislação Profissional |
Responsabilidade civil no código de defesa do consumidor Um consumidor compra um ferro de passar roupa e quando está manejando o ferro pela primeira vez ele explode e o atinge, causando-lhe danos morais e estéticos. O consumidor é levado ao hospital para tratar alguns ferimentos. Nesse caso, a ação indenizatória deverá ser proposta em face do fabricante no prazo de: A) prazo decadencial de 5 anos. B) prazo prescricional de 30 dias. C) prazo decadencial de 90 dias. D) prazo prescricional de 5 anos. E) prazo prescricional de 90 dias. Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em Fundações |
Sondagem à Percussão (SPT) e Rotativa (RQD) Identifique a qualidade do maciço através do RQD de uma porção da rocha cuja manobra na sondagem rotativa foi de 1,5m e recuperou-se os seguintes fragmentos: 12cm + 16cm + 7cm + 35cm + 6cm + 14cm + 8cm + 2cm + 50cm. A) Trata-se de um maciço muito fraco. RQD menor que 25%. B) Trata-se de um maciço fraco, com RQD entre 25 e 50%. C) Trata-se de um maciço regular, com RQD entre 50 e 75%. D) Trata-se de um maciço bom, com RQD entre 75 e 90%. E) Trata-se de um maciço excelente, RQD=100%. 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 Topografia |
Rumo e azimute Prova de Engenharia Civil Prefeitura de Jarú O azimute correspondente ao rumo 32º 20' 30'' é: A) 212º 20' 30'' B) 147º 39' 30'' C) 327º 39' 30'' D) 302º 20' 30'' E) 58º 40' 30'' Verificar Resposta Estudar Cards Todas as Questões |
Desafios, Exercícios e Algoritmos Resolvidos de JavaScript |
Veja mais Dicas e truques de JavaScript |
Dicas e truques de outras linguagens |
Códigos Fonte |
Software 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 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 |