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: 1702 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>
|
|
|
Desafios, Exercícios e Algoritmos Resolvidos de JavaScript |
Veja mais Dicas e truques de JavaScript |
Dicas e truques de outras linguagens |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
|
1º lugar: Java |







