Material utilizado nas aulas de Estruturas de Dados do curso superior de Tecnologia em Sistemas para Internet da Faculdade de Tecnologia de Taquaritinga, para apoiar a explicação do conceito de Árvore Binária (Binary Tree), com exemplos e implementação prática utilizando JavaScript (com classes do ECMAScript 2015).
2. Inserindo Nós
nó pai
nulo?
nó raiz
nulo?
nó raiz = novo nó
criar novo nó
fim
incrementa tamanho
da árvore
valor >
valor do
nó pai?
nó pai = nó raiz
sim
não
início
não
sim
direita
do nó pai
nula?
direita do nó pai =
novo nó
esquerda
do nó pai
nula?
esquerda do nó pai =
novo nó
sim
não
recursão passando valor
e direita do nó pai
recursão passando valor
e esquerda do nó pai
sim sim
não não
3. insert (value, parent) {
const inserted = new Node(value)
if (parent == null) {
if (this.root == null){
this.root = inserted
this.length++
return
} else {
parent = this.root
}
}
// Continua...
}
JavaScript
Inserindo Nós
4. // Continuação:
if (value > parent.value) {
if (parent.right == null) {
parent.right = inserted
this.length++
} else {
this.insert(value, parent.right)
}
} else if (value < parent.value) {
if (parent.left == null) {
parent.left = inserted
this.length++
} else {
this.insert(value, parent.left)
}
}
JavaScript
Inserindo Nós
5. visitapré-ordem
root
2
41
6
8
7
1. Pegue um nó
(na dúvida, a raiz)
2. Visite o nó
3. Visite a esquerda
(recursivamente)
4. Visite a direita
(recursivamente)
1
2
3
4
Resultado:
[6, 1, 2, 4, 7, 8]
5
6
6. preOrder (node = this.root) {
let result = []
result.push(node.value)
if (node.left) {
result.push(...this.preOrder(node.left))
}
if (node.right) {
result.push(...this.preOrder(node.right))
}
return result
}
JavaScript
Função preOrder
Leia mais sobre o Operador Spread para entender como o Array retornado pela recursão é inserido:
https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Operators/Spread_operator
7. visitapós-ordem
root
2
41
6
8
7
1. Pegue um nó
(na dúvida, a raiz)
2. Visite a esquerda
(recursivamente)
3. Visite a direita
(recursivamente)
4. Visite o nó 1
2
3
Resultado:
[1, 2, 4, 7, 8, 6]
4
5
6
8. postOrder (node = this.root) {
let result = []
if (node.left) {
result.push(...this.postOrder(node.left))
}
if (node.right) {
result.push(...this.postOrder(node.right))
}
result.push(node.value)
return result
}
JavaScript
Função postOrder
9. visitaem-ordem
root
2
41
6
8
7
1. Pegue um nó
(na dúvida, a raiz)
2. Visite a esquerda
(recursivamente)
3. Visite o nó
4. Visite a direita
(recursivamente) 1
2
3
4
5
6
Resultado:
[1, 2, 4, 6, 7, 8]
10. inOrder (node = this.root) {
let result = []
if (node.left) {
result.push(...this.inOrder(node.left))
}
result.push(node.value)
if (node.right) {
result.push(...this.inOrder(node.right))
}
return result
}
JavaScript
Função inOrder
11. buscandonós
root
2
41
6
8
7
1. Pegue um nó alvo
(na dúvida, a raiz)
2. Se o valor procurado é maior
que o do nó, visite a direita
3. Se o valor procurado é menor
que o do nó, visite a esquerda
4. Retorne true
quando achar o valor
5. Retorne false
quando não tiver mais
para onde ir
Exemplo: 4
12. Buscando Nós
fim
valor >
valor do
nó?
não
início
recursão passando o
valor e a direita do nó
recebe valor
procurado
recebe nó alvo
(ou raiz)
valor <
valor do
nó?sim
direita
do nó
nula?
sim
retorne false
retorne o resultado
da recursão
não
não
recursão passando o
valor e a esquerda do nó
esquerda
do nó
nula?sim
retorne false
retorne o resultado
da recursão
sim
valor =
valor do
nó?
retorne true
retorne false
sim
não
não