Mikaela Maia
Departamento de Sistemas e Computação
Universidade Federal de Campina Grande
Árvore Binária derivada de uma sequência de
números
Introduzida por
Vuillemin
em 1980 no
contexto de
geometric range searching data
structures
Um nó para cada número de uma sequência
Caminhar em ordem na árvore resulta na
sequência original
◦
A árvore à esquerda de um nó consiste em valores
anteriores a ele na ordem da sequência
◦
A árvore à direita de um nó consiste em valores
posteriores a ele na ordem da sequência
Heap property (Min)
Baseado na
heap property
qual o
comportamento da raiz de uma Cartesian
Tree?
Baseado na
heap property
qual o
comportamento da raiz de uma Cartesian
Tree?
É o menor valor da
É o menor valor da
É o menor valor da
Recursivamente
As subárvores à esquerda e a direita da raiz são
Cartesian Trees das subsequências à esquerda
e à direita da raiz.
• Raiz da árvore
• Menor valor da sequência
• Raiz da Subárvore • Menor valor
da
• Raiz da Subárvore • Menor valor
da
Lembrando as propriedades ...
◦
Um nó para cada número de uma sequência
◦
Caminhar em ordem na árvore resulta na
sequência original
A árvore à esquerda de um nó consiste em valores anteriores a ele na ordem da sequência
A árvore à direita de um nó consiste em valores posteriores a ele na ordem da sequência
◦
Heap property (Min)
O pai de qualquer nó não-raiz tem um valor inferior que o valor de seus filhos
1.
Se o novo nó é maior que o último inserido,
insere-se o novo nó como filho a direita
direita
direita do
direita
último;
◦ X – último nó inserido na árvore
◦ Y – novo nó a ser inserido
◦ Y > X x xx x y y y y
2.
Caso contrário, se o pai do último inserido é
menor ou igual ao novo nó,
inserimos o novo
como seu filho a direita e o antigo filho a direita
dele se torna o filho a esquerda do novo nó;
◦ X – último nó inserido na árvore
◦ Z – o pai de X
◦ Y – novo nó a ser inserido
◦ Y<= X & Z <= Y z zz z x x x x z z z z y y y y x xx x
3.
Caso contrário, verifica se o avô do último nó inserido
é menor ou igual ao novo nó e assim por diante até
encontrar um nó menor ou igual ao novo,
inserimos o
novo como seu filho a direita e o antigo filho a direita
dele se torna o filho a esquerda do novo nó;
◦ X – último nó inserido na árvore
◦ Z – avô || bisavô || tataravô ... do último nó inserido
◦ Y – novo nó a ser inserido
◦ Y<= X & Z <= Y z z z z zzzz y y y y x xx x
...
...
4.
Se não encontrar nenhum nó na árvore que o novo
nó seja menor que ele, significa que o novo nó é o
menor nó até então e deve se tornar a raiz da
árvore e a antiga raiz sua filha a esquerda.
◦ R – raiz da árvore
◦ Y – novo nó a ser inserido
◦ Y<= R 15 R RR R
...
...
R R R R...
...
Y Y Y Y9 99 9
9 99 9 3 33 3
Se não encontrar nenhum nó na árvore Se não encontrar nenhum nó na árvore Se não encontrar nenhum nó na árvore Se não encontrar nenhum nó na árvore que o novo nó seja menor que ele,
que o novo nó seja menor que ele, que o novo nó seja menor que ele, que o novo nó seja menor que ele,
significa que o novo nó é o menor nó até significa que o novo nó é o menor nó até significa que o novo nó é o menor nó até significa que o novo nó é o menor nó até então e deve se tornar a raiz da árvore e então e deve se tornar a raiz da árvore e então e deve se tornar a raiz da árvore e então e deve se tornar a raiz da árvore e a antiga raiz sua filha a esquerda
a antiga raiz sua filha a esquerda a antiga raiz sua filha a esquerda a antiga raiz sua filha a esquerda
9 99 9 3 33 3 7 7 7 7
Se o novo nó é maior que o último Se o novo nó é maior que o último Se o novo nó é maior que o último Se o novo nó é maior que o último inserido, insere
inserido, insere inserido, insere
inserido, insere---se o novo nó como -se o novo nó como se o novo nó como se o novo nó como filho a direita do último
filho a direita do último filho a direita do último filho a direita do último
9 99 9 3 33 3 7 77 7 1 11 1
Se não encontrar nenhum nó na árvore que o novo nó seja menor que ele,
significa que o novo nó é o menor nó até então e deve se tornar a raiz da árvore e a antiga raiz sua filha a esquerda
9 99 9 3 33 3 7 77 7 1 11 1
Se o novo nó é maior que o último
inserido, insere-se o novo nó como filho a direita do último
8 88 8
9 99 9 3 33 3 7 7 7 7 1 11 1
Se o novo nó é maior que o último
inserido, insere-se o novo nó como filho a direita do último 8 88 8 12 12 12 12
9 99 9 3 33 3 7 77 7 1 1 1 1 Se o pai do último é Se o pai do último é Se o pai do último é Se o pai do último é
menor ou igual ao novo menor ou igual ao novo menor ou igual ao novo menor ou igual ao novo inserimos o novo como inserimos o novo como inserimos o novo como inserimos o novo como seu filho a direita e o seu filho a direita e o seu filho a direita e o seu filho a direita e o
antigo filho a direita dele antigo filho a direita dele antigo filho a direita dele antigo filho a direita dele se torna o filho a se torna o filho a se torna o filho a se torna o filho a esquerda do novo nó esquerda do novo nó esquerda do novo nó esquerda do novo nó 8 8 8 8 10 1010 10 12 12 12 12
9 99 9 3 33 3 7 77 7 1 11 1
Se o novo nó é maior que o último inserido, insere-se o novo nó como filho a direita do último 8 8 8 8 10 1010 10 12 12 12 12 20202020
9 99 9 3 33 3 7 77 7 1 11 1
Se o pai do último é menor ou igual ao novo
inserimos o novo como seu filho a direita e o
antigo filho a direita dele se torna o filho a esquerda do novo nó 8 8 8 8 10 1010 10 15 15 15 15 12 1212 12
9 99 9 3 33 3 7 77 7 1 11 1 8 8 8 8 10 1010 10 15 15 15 15 12 1212 12 20 2020 20
Se o novo nó é maior que o último inserido, insere-se o novo nó como filho a direita do último
18 18 18 18
9 9 9 9 3 33 3 7 77 7 1 11 1 8 8 8 8 10 10 10 10 15 15 15 15 12 1212 12
Verifica se o avô do último é menor ou igual ao novo e assim por diante até
encontrar um nó menor ou igual ao novo, inserimos o novo como seu filho a
direita e o antigo filho a direita dele se torna o filho a esquerda do novo nó.
5 55 5
Range minimum query
◦
Problema envolvendo consultas que buscam o valor
mínimo de uma subsequência de uma sequência
Range minimum query
◦
Problema envolvendo consultas que buscam o valor
mínimo de uma subsequência de uma sequência
Lowest common ancestor
◦
Mais baixo (em altura) ancestral comum do valor
mais a esquerda e mais a direita de uma
subsequência
◦
LCA entre 6 e 9 é 8
3 3 3 3 0 00 0 2 2 2 2 8 88 8 3 3 3 3 4 44 4 9999 5 55 5 6 6 6 6LCA de uma árvore binária
Numa
Cartesian Tree
qual o
Range minimum
e o
Lowest common ancestor?
‣
Na subsequência
(12,10,20,15)
‣
RMQ(12,15) =
?
Numa
Cartesian Tree
qual o
Range minimum
e o
Lowest common ancestor?
‣
Na subsequência
(12,10,20,15)
‣
RMQ(12,15) =
10
Questoes de implementacao
◦
Como fica a implementacao de uma Cartesian Tree?
Podemos reusar alguma implementação anterior?
class CartesianTree<T> { BSTNode<T> root; } class BSTNode<T> { V data; BSTNode<T> left; BSTNode<T> right; BSTNode<T> parent; }Questoes de implementacao
◦
Como fica a implementacao de uma Cartesian Tree?
class CartesianTree<T> extends BSTImpl{ BSTNode<T> root; ArrayList sequence; } class BSTNode<T> { V data; BSTNode<T> left; BSTNode<T> right; BSTNode<T> parent; }