Skip to content

Commit a1953b1

Browse files
committed
Arvore de Busca Binaria em javascript
1 parent 206e142 commit a1953b1

File tree

2 files changed

+181
-1
lines changed

2 files changed

+181
-1
lines changed

Javascript/ArvoreDeBuscaBinaria.js

Lines changed: 180 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,180 @@
1+
class NoArvoreBinaria{
2+
constructor(valor, esquerda, direita){
3+
this.valor = valor;
4+
this.esquerda = esquerda;
5+
this.direita = direita;
6+
}
7+
}
8+
9+
class ArvoreDeBuscaBinaria{
10+
constructor(){
11+
this.raiz = null;
12+
}
13+
14+
add(valor){
15+
let novoNo = new NoArvoreBinaria(valor, null, null);
16+
17+
if(this.raiz == null)
18+
this.raiz = novoNo;
19+
20+
else {
21+
let auxiliar = this.raiz;
22+
let encontrado = false;
23+
24+
while(!encontrado){
25+
if(novoNo.valor < auxiliar.valor){
26+
if(auxiliar.esquerda == null){
27+
auxiliar.esquerda = novoNo;
28+
encontrado = true;
29+
} else {
30+
auxiliar = auxiliar.esquerda;
31+
}
32+
33+
} else {
34+
if(auxiliar.direita == null){
35+
auxiliar.direita = novoNo;
36+
encontrado = true;
37+
} else {
38+
auxiliar = auxiliar.direita;
39+
}
40+
}
41+
}
42+
}
43+
}
44+
45+
remove(valor){
46+
let auxiliar = this.raiz
47+
let encontrado = false;
48+
49+
if(valor != this.raiz.valor){
50+
let anterior = this.raiz;
51+
52+
while(auxiliar != null && !encontrado){
53+
if(valor == auxiliar.valor){
54+
encontrado = true;
55+
} else if(valor < auxiliar.valor){
56+
anterior = auxiliar;
57+
auxiliar = auxiliar.esquerda;
58+
} else {
59+
anterior = auxiliar;
60+
auxiliar = auxiliar.direita;
61+
}
62+
}
63+
64+
if(auxiliar == null){
65+
console.log("Elemento não existe");
66+
return;
67+
}
68+
69+
if(auxiliar.direita == null && auxiliar.esquerda == null){
70+
if(anterior.esquerda == auxiliar) anterior.esquerda = null;
71+
else anterior.direita = null;
72+
73+
} else if(auxiliar.direita != null && auxiliar.esquerda == null){
74+
if(anterior.esquerda == auxiliar) anterior.esquerda = auxiliar.direita;
75+
else anterior.direita = auxiliar.direita;
76+
77+
} else if(auxiliar.direita == null && auxiliar.esquerda != null){
78+
if(anterior.esquerda == auxiliar) anterior.esquerda = auxiliar.esquerda;
79+
else anterior.direita = auxiliar.esquerda;
80+
81+
} else {
82+
let noDireitaElementoEscluido = auxiliar.direita;
83+
let noEsquerdaElementoEscluido = auxiliar.esquerda;
84+
let anteriorDoAuxiliar;
85+
86+
if(auxiliar == anterior.direita){
87+
auxiliar = auxiliar.esquerda;
88+
while(auxiliar.direita != null){
89+
anteriorDoAuxiliar = auxiliar;
90+
auxiliar = auxiliar.direita;
91+
}
92+
anterior.direita = auxiliar;
93+
94+
} else {
95+
auxiliar = auxiliar.esquerda;
96+
while(auxiliar.direita != null){
97+
anteriorDoAuxiliar = auxiliar;
98+
auxiliar = auxiliar.direita;
99+
}
100+
anterior.esquerda = auxiliar;
101+
102+
}
103+
104+
auxiliar.direita = noDireitaElementoEscluido;
105+
auxiliar.esquerda = noEsquerdaElementoEscluido;
106+
anteriorDoAuxiliar.direita = null;
107+
}
108+
109+
} else {
110+
if(auxiliar.direita == null && auxiliar.esquerda == null) {
111+
this.raiz = null;
112+
} else {
113+
if (auxiliar.esquerda != null && auxiliar.direita == null)
114+
this.raiz = auxiliar.esquerda;
115+
else if (auxiliar.esquerda == null && auxiliar.direita != null)
116+
this.raiz = auxiliar.direita;
117+
else if (auxiliar.esquerda != null && auxiliar.direita != null) {
118+
let noDireitaElementoEscluido = this.raiz.direita;
119+
let noEsquerdaElementoEscluido = this.raiz.esquerda;
120+
let anteriorDoAuxiliar;
121+
122+
auxiliar = this.raiz.esquerda;
123+
while(auxiliar.direita != null) {
124+
anteriorDoAuxiliar = auxiliar;
125+
auxiliar = auxiliar.direita;
126+
}
127+
this.raiz = auxiliar;
128+
129+
auxiliar.direita = noDireitaElementoEscluido;
130+
auxiliar.esquerda = noEsquerdaElementoEscluido;
131+
anteriorDoAuxiliar.direita = null;
132+
}
133+
}
134+
135+
}
136+
}
137+
138+
verificaElemento(valor){
139+
let auxiliar = this.raiz;
140+
encontrado = false;
141+
142+
while(auxiliar != null && !encontrado){
143+
if(valor == auxiliar.valor) encontrado = true;
144+
else if (valor < auxiliar.valor) auxiliar = auxiliar.esquerda;
145+
else if (valor > auxiliar.valor) auxiliar = auxiliar.direita;
146+
}
147+
148+
if(encontrado) console.log("Elemento Presente");
149+
else console.log("Elemento Não Encontrado");
150+
}
151+
152+
consultaPreOrdem(raiz = this.raiz){
153+
let auxiliar = raiz;
154+
155+
console.log(auxiliar.valor);
156+
if(auxiliar.esquerda != null) this.consultaPreOrdem(auxiliar.esquerda);
157+
if(auxiliar.direita != null) this.consultaPreOrdem(auxiliar.direita);
158+
}
159+
160+
consultaPosOrdem(raiz = this.raiz){
161+
let auxiliar = raiz;
162+
163+
if(auxiliar.esquerda != null) this.consultaPreOrdem(auxiliar.esquerda);
164+
if(auxiliar.direita != null) this.consultaPreOrdem(auxiliar.direita);
165+
console.log(auxiliar.valor);
166+
}
167+
168+
consultaOrdem(raiz = this.raiz){
169+
let auxiliar = raiz;
170+
171+
if(auxiliar.esquerda != null) this.consultaPreOrdem(auxiliar.esquerda);
172+
console.log(auxiliar.valor);
173+
if(auxiliar.direita != null) this.consultaPreOrdem(auxiliar.direita);
174+
}
175+
176+
esvaziar(){
177+
this.raiz = null;
178+
}
179+
}
180+

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ Com o objetivo de alcançar uma abrangência maior e encorajar novas pessoas a c
88
|-------------------------------------|-------|------|--------|----|------|------------|
99
| [Algoritmo Dijkstra][1] | [C/C++](/C/AlgoritmoDijkstra.c) | Java | Python | Go | Ruby | Ruby | Javascript |
1010
| [Algoritmo Floyd Warshall][2] | [C/C++](/C/AlgoritmoFloydWarshall.c) | Java | Python | Go | Ruby | Ruby | Javascript |
11-
| [Árvore Binária de Busca][3] | [C/C++](/C/ArvoreBinariaDeBusca.c) | [Java](/Java/ArvoreDeBuscaBinaria.java) | [Python](/Python/arvore_binaria_de_busca.py) | Go | Ruby | Ruby | Javascript |
11+
| [Árvore Binária de Busca][3] | [C/C++](/C/ArvoreBinariaDeBusca.c) | [Java](/Java/ArvoreDeBuscaBinaria.java) | [Python](/Python/arvore_binaria_de_busca.py) | Go | Ruby | Ruby | [Javascript](/Javascript/ArvoreDeBuscaBinaria.js) |
1212
| [Árvore Binária Utilizando Classes][4] | C/C++ | Java | [Python](/Python/BinaryTree.py) | Go | Ruby | Javascript |
1313
| [Busca Binária][5] | [C/C++](/C/BinarySearch.cpp) | Java | [Python](/Python/BuscaBinaria.py) | Go | [Ruby](/Ruby/BuscaBinaria.rb) | Javascript |
1414
| [Busca em Grafos][6] | [C/C++](/C/BuscaEmGrafo.c) | Java | Python | Go | Ruby | Javascript |

0 commit comments

Comments
 (0)