Árvore binária -definiçãowebserver2.tecgraf.puc-rio.br/eda/eda_01_arvbinbusca.pdf · Árvore...
TRANSCRIPT
![Page 1: Árvore binária -definiçãowebserver2.tecgraf.puc-rio.br/eda/EDA_01_ArvBinBusca.pdf · Árvore binária -definição árvorebinária: conjuntofinitode nós Æ(árvorevazia) {raiz,](https://reader033.vdocuments.pub/reader033/viewer/2022042920/5f6799055131eb2a6c5334ab/html5/thumbnails/1.jpg)
Árvore binária - definição
árvore binária: conjunto finito de nósÆ (árvore vazia)
{raiz, sub-árvore esquerda, sub-árvore direita}, ondesae e sad são conjuntos disjuntos
07/03/2018 1
Æ raiz
sae sad
ou/* nó da árvore binária */struct Node {
int raiz;Node* sae;Node* sad;
};
© 2012 DI, PUC-Rio • Estruturas de Dados Avançadas • 2012.1
![Page 2: Árvore binária -definiçãowebserver2.tecgraf.puc-rio.br/eda/EDA_01_ArvBinBusca.pdf · Árvore binária -definição árvorebinária: conjuntofinitode nós Æ(árvorevazia) {raiz,](https://reader033.vdocuments.pub/reader033/viewer/2022042920/5f6799055131eb2a6c5334ab/html5/thumbnails/2.jpg)
Árvore binária
07/03/2018 2
(A (B) ( ))
¹A
B
A
B
(A ( ) (B))
© 2012 DI, PUC-Rio • Estruturas de Dados Avançadas • 2012.1
![Page 3: Árvore binária -definiçãowebserver2.tecgraf.puc-rio.br/eda/EDA_01_ArvBinBusca.pdf · Árvore binária -definição árvorebinária: conjuntofinitode nós Æ(árvorevazia) {raiz,](https://reader033.vdocuments.pub/reader033/viewer/2022042920/5f6799055131eb2a6c5334ab/html5/thumbnails/3.jpg)
Exemplo
07/03/2018 © 2011 DI, PUC-Rio • Estruturas de Dados Avançadas • 2011.2 3
árvores binárias representando expressões
aritméticas:
nós folhas representam operandos
nós internos operadores
exemplo: (3+6)*(4-1)+5*
+ –
1463
5
+
![Page 4: Árvore binária -definiçãowebserver2.tecgraf.puc-rio.br/eda/EDA_01_ArvBinBusca.pdf · Árvore binária -definição árvorebinária: conjuntofinitode nós Æ(árvorevazia) {raiz,](https://reader033.vdocuments.pub/reader033/viewer/2022042920/5f6799055131eb2a6c5334ab/html5/thumbnails/4.jpg)
07/03/2018 (c) Dept. Informática - PUC-Rio 4
Árvores binárias
• Notação textual:
– a árvore vazia é representada por <>
– árvores não vazias por <raiz sae sad>
– exemplo:
<a <b <> <d<><>> > <c <e<><>> <f<><>>> >
a
b c
fed
![Page 5: Árvore binária -definiçãowebserver2.tecgraf.puc-rio.br/eda/EDA_01_ArvBinBusca.pdf · Árvore binária -definição árvorebinária: conjuntofinitode nós Æ(árvorevazia) {raiz,](https://reader033.vdocuments.pub/reader033/viewer/2022042920/5f6799055131eb2a6c5334ab/html5/thumbnails/5.jpg)
07/03/2018 (c) Dept. Informática - PUC-Rio 5
Árvores binárias - Ordens de percurso
• Ordens de percurso:
– pré-ordem:
• trata raiz, percorre sae, percorre sad
• exemplo: a b d c e f
– ordem simétrica:
• percorre sae, trata raiz, percorre sad
• exemplo: b d a e c f
– pós-ordem:
• percorre sae, percorre sad, trata raiz
• exemplo: d b e f c a
a
b c
fed
![Page 6: Árvore binária -definiçãowebserver2.tecgraf.puc-rio.br/eda/EDA_01_ArvBinBusca.pdf · Árvore binária -definição árvorebinária: conjuntofinitode nós Æ(árvorevazia) {raiz,](https://reader033.vdocuments.pub/reader033/viewer/2022042920/5f6799055131eb2a6c5334ab/html5/thumbnails/6.jpg)
Percurso – pré-ordem
07/03/2018 6
A
B
C
D
E
L
GK F
H
J
IM
A B E K * L F C G D H M I * J * *
© 2012 DI, PUC-Rio • Estruturas de Dados Avançadas • 2012.1
![Page 7: Árvore binária -definiçãowebserver2.tecgraf.puc-rio.br/eda/EDA_01_ArvBinBusca.pdf · Árvore binária -definição árvorebinária: conjuntofinitode nós Æ(árvorevazia) {raiz,](https://reader033.vdocuments.pub/reader033/viewer/2022042920/5f6799055131eb2a6c5334ab/html5/thumbnails/7.jpg)
*
Percurso – pós-ordem
07/03/2018 7
A
B
C
D
E
L
GK F
H
J
IM
ABEKL F CG DHM I* J * *
© 2012 DI, PUC-Rio • Estruturas de Dados Avançadas • 2012.1
![Page 8: Árvore binária -definiçãowebserver2.tecgraf.puc-rio.br/eda/EDA_01_ArvBinBusca.pdf · Árvore binária -definição árvorebinária: conjuntofinitode nós Æ(árvorevazia) {raiz,](https://reader033.vdocuments.pub/reader033/viewer/2022042920/5f6799055131eb2a6c5334ab/html5/thumbnails/8.jpg)
*
Percurso – ordem simétrica
07/03/2018 8
A
B
C
D
E
L
GK F
H
J
IM
ABEK L F CG DHM I* J * *
© 2012 DI, PUC-Rio • Estruturas de Dados Avançadas • 2012.1
![Page 9: Árvore binária -definiçãowebserver2.tecgraf.puc-rio.br/eda/EDA_01_ArvBinBusca.pdf · Árvore binária -definição árvorebinária: conjuntofinitode nós Æ(árvorevazia) {raiz,](https://reader033.vdocuments.pub/reader033/viewer/2022042920/5f6799055131eb2a6c5334ab/html5/thumbnails/9.jpg)
07/03/2018 (c) Dept. Informática - PUC-Rio 9
Árvores binárias - Altura
• Propriedade fundamental de árvores– só existe um caminho da raiz para qualquer nó
• Altura de uma árvore
– comprimento do caminho mais longo da raiz até uma das folhas
• a altura de uma árvore com um único nó raiz é zero
• a altura de uma árvore vazia é -1
– exemplo:
• h = 2a
b c
fed
![Page 10: Árvore binária -definiçãowebserver2.tecgraf.puc-rio.br/eda/EDA_01_ArvBinBusca.pdf · Árvore binária -definição árvorebinária: conjuntofinitode nós Æ(árvorevazia) {raiz,](https://reader033.vdocuments.pub/reader033/viewer/2022042920/5f6799055131eb2a6c5334ab/html5/thumbnails/10.jpg)
07/03/2018 (c) Dept. Informática - PUC-Rio 10
Árvores binárias - Altura
• Nível de um nó
– a raiz está no nível 0, seus filhos diretos no nível 1, ...
– o último nível da árvore é a altura da árvore
a
b c
fed
nível 0
nível 1
nível 2
![Page 11: Árvore binária -definiçãowebserver2.tecgraf.puc-rio.br/eda/EDA_01_ArvBinBusca.pdf · Árvore binária -definição árvorebinária: conjuntofinitode nós Æ(árvorevazia) {raiz,](https://reader033.vdocuments.pub/reader033/viewer/2022042920/5f6799055131eb2a6c5334ab/html5/thumbnails/11.jpg)
07/03/2018 (c) Dept. Informática - PUC-Rio 11
Árvores binárias - Altura
• Árvore cheia – todos os seus nós internos têm duas sub-árvores associadas
– número n de nós de uma árvore cheia de altura h
n = 12 1 -+h
nível 0: 20 = 1 nó
nível 1: 21 = 2 nós
nível 2: 22 = 4 nós
nível 3: 23 = 8 nós
![Page 12: Árvore binária -definiçãowebserver2.tecgraf.puc-rio.br/eda/EDA_01_ArvBinBusca.pdf · Árvore binária -definição árvorebinária: conjuntofinitode nós Æ(árvorevazia) {raiz,](https://reader033.vdocuments.pub/reader033/viewer/2022042920/5f6799055131eb2a6c5334ab/html5/thumbnails/12.jpg)
07/03/2018 (c) Dept. Informática - PUC-Rio 12
Árvores binárias - Altura
• Árvore degenerada – todos os seus nós internos têm uma única sub-árvore associada
– número n de nós de uma árvore degenerada de altura h
n = h+1
![Page 13: Árvore binária -definiçãowebserver2.tecgraf.puc-rio.br/eda/EDA_01_ArvBinBusca.pdf · Árvore binária -definição árvorebinária: conjuntofinitode nós Æ(árvorevazia) {raiz,](https://reader033.vdocuments.pub/reader033/viewer/2022042920/5f6799055131eb2a6c5334ab/html5/thumbnails/13.jpg)
07/03/2018 (c) Dept. Informática - PUC-Rio 13
Árvores binárias - Altura
• Esforço computacional necessário para alcançar qualquer nó da árvore
– proporcional à altura da árvore
– altura de uma árvore binária com n nós
• mínima: proporcional a log n (caso da árvore cheia)
• máxima: proporcional a n (caso da árvore degenerada)
![Page 14: Árvore binária -definiçãowebserver2.tecgraf.puc-rio.br/eda/EDA_01_ArvBinBusca.pdf · Árvore binária -definição árvorebinária: conjuntofinitode nós Æ(árvorevazia) {raiz,](https://reader033.vdocuments.pub/reader033/viewer/2022042920/5f6799055131eb2a6c5334ab/html5/thumbnails/14.jpg)
Árvore binária - conceitos
número máximo de nós no nível i:2i
número máximo de nós na árvore de altura k:2k+1 - 1, k ³ 0 ( = 2k … + 22+ 2 + 1)
árvore binária cheia de altura k:árvore que possui 2k+1 – 1 nós
se k = 2, árvore binária
cheia possui 23-1 = 7 nós
07/03/2018 14
A
C
G
B
FD E
nível:
0
1
2
© 2012 DI, PUC-Rio • Estruturas de Dados Avançadas • 2012.1
![Page 15: Árvore binária -definiçãowebserver2.tecgraf.puc-rio.br/eda/EDA_01_ArvBinBusca.pdf · Árvore binária -definição árvorebinária: conjuntofinitode nós Æ(árvorevazia) {raiz,](https://reader033.vdocuments.pub/reader033/viewer/2022042920/5f6799055131eb2a6c5334ab/html5/thumbnails/15.jpg)
Árvore binária – conceitos (cont.)
árvore binária completatoda folha está no último ou penúltimo nível
árvore estritamente bináriacada nó tem 0 ou dois filhos
07/03/2018 15
A
CB
D E
nível:
0
1
2
A
B C
A
estritamente binárias
A
B
A
B
NÃO estritamente binárias
© 2012 DI, PUC-Rio • Estruturas de Dados Avançadas • 2012.1
![Page 16: Árvore binária -definiçãowebserver2.tecgraf.puc-rio.br/eda/EDA_01_ArvBinBusca.pdf · Árvore binária -definição árvorebinária: conjuntofinitode nós Æ(árvorevazia) {raiz,](https://reader033.vdocuments.pub/reader033/viewer/2022042920/5f6799055131eb2a6c5334ab/html5/thumbnails/16.jpg)
ClasseÁrvoreBinária
07/03/2018 16
............. ... . ... . . . ..... .. .... .. . ..... .... . ..© 2012 DI, PUC-Rio • Estruturas de Dados Avançadas • 2012.1
struct AbbNo{
int _chave;AbbNo* _esq; AbbNo* _dir;
};
class Abb{public:
Abb(); Abb(c int& info); Abb(const Abb& orig);~Abb(); void insere(int info);bool remove(int info); void mostra(char* title);int altura();int tamanho();
private:AbbNo* _raiz;
};
![Page 17: Árvore binária -definiçãowebserver2.tecgraf.puc-rio.br/eda/EDA_01_ArvBinBusca.pdf · Árvore binária -definição árvorebinária: conjuntofinitode nós Æ(árvorevazia) {raiz,](https://reader033.vdocuments.pub/reader033/viewer/2022042920/5f6799055131eb2a6c5334ab/html5/thumbnails/17.jpg)
O que vamos estudar de árvores binárias?
0.000000
2.000000
4.000000
6.000000
8.000000
10.000000
12.000000
14.000000
16.000000
500
1000
2000
4000
8000
16000
32000
64000
1E+05
3E+05
5E+05
1E+06
Ab
Abb
Avl
Rbt
tamanho do problema
tem
po d
e in
serç
aoe
rem
oção
07/03/2018 17© 2012 DI, PUC-Rio • Estruturas de Dados Avançadas • 2012.1
![Page 18: Árvore binária -definiçãowebserver2.tecgraf.puc-rio.br/eda/EDA_01_ArvBinBusca.pdf · Árvore binária -definição árvorebinária: conjuntofinitode nós Æ(árvorevazia) {raiz,](https://reader033.vdocuments.pub/reader033/viewer/2022042920/5f6799055131eb2a6c5334ab/html5/thumbnails/18.jpg)
© 2018 DI, PUC-Rio • Estruturas de Dados Avançadas – Versão C++© 2017 DI, PUC-Rio • Estruturas de Dados Avançadas – Versão C++07/03/2018 18
Árvores binárias de busca(Abb)
< 15 > 15
< 10 > 10
15
30
50
10
243 12
14
![Page 19: Árvore binária -definiçãowebserver2.tecgraf.puc-rio.br/eda/EDA_01_ArvBinBusca.pdf · Árvore binária -definição árvorebinária: conjuntofinitode nós Æ(árvorevazia) {raiz,](https://reader033.vdocuments.pub/reader033/viewer/2022042920/5f6799055131eb2a6c5334ab/html5/thumbnails/19.jpg)
© 2018 DI, PUC-Rio • Estruturas de Dados Avançadas – Versão C++
< 15 > 15
< 10 > 10
Definição de uma Abb
Abb é uma árvore binária vazia,
ou1. cada nó possui uma chave
2. as chaves na sub-árvore esquerda (se
houver) são menores do que a chave da raiz
3. as chaves na sub-árvore direita (se
houver) são maiores do que a chave da raiz
4. as sub-árvores esquerda e direita são
árvores binárias de busca
07/03/2018 19
15
30
50
10
243 12
14
Æ
![Page 20: Árvore binária -definiçãowebserver2.tecgraf.puc-rio.br/eda/EDA_01_ArvBinBusca.pdf · Árvore binária -definição árvorebinária: conjuntofinitode nós Æ(árvorevazia) {raiz,](https://reader033.vdocuments.pub/reader033/viewer/2022042920/5f6799055131eb2a6c5334ab/html5/thumbnails/20.jpg)
© 2018 DI, PUC-Rio • Estruturas de Dados Avançadas – Versão C++
Uma implementação de Abb em C++
struct Node {int _key;Node* _up;Node* _left;Node* _right;
};
class Abb {public:
Abb();Abb(int key);…
private: Node* _root;
};
abb.hppAbb::Abb() {
_root = nullptr;}
Abb::Abb(int key) {_root = new Node;_root->_key = key;_root->_left = nullptr;_root->_right = nullptr;_root->_up = nullptr;
}
07/03/2018 20
abb.cpp
left right
up
key
![Page 21: Árvore binária -definiçãowebserver2.tecgraf.puc-rio.br/eda/EDA_01_ArvBinBusca.pdf · Árvore binária -definição árvorebinária: conjuntofinitode nós Æ(árvorevazia) {raiz,](https://reader033.vdocuments.pub/reader033/viewer/2022042920/5f6799055131eb2a6c5334ab/html5/thumbnails/21.jpg)
© 2018 DI, PUC-Rio • Estruturas de Dados Avançadas – Versão C++
Busca numa Abb
15
10
5
15
18
20
25
16 19 22
21
30
19
Não é o 15, é maior. Busque na s.a.d.
07/03/2018 21
![Page 22: Árvore binária -definiçãowebserver2.tecgraf.puc-rio.br/eda/EDA_01_ArvBinBusca.pdf · Árvore binária -definição árvorebinária: conjuntofinitode nós Æ(árvorevazia) {raiz,](https://reader033.vdocuments.pub/reader033/viewer/2022042920/5f6799055131eb2a6c5334ab/html5/thumbnails/22.jpg)
© 2018 DI, PUC-Rio • Estruturas de Dados Avançadas – Versão C++
Algoritmo para busca em ABBs
1. Começe a busca pelo nó raiz
2. Se a árvore for vazia retorne NULL
3. CC se a chave procurada for menor que a chave do nó, procure na sub-árvore à esquerda e responda com a resposta que você receber
4. CC se a chave procurada for maior que a chave do nó, procure na sub-árvore à direita e responda com a respostaque você receber
5. CC se for igual responda com o endereço do nó
CC = caso contrário
Node* Abb::search(int key);
07/03/2018 22
![Page 23: Árvore binária -definiçãowebserver2.tecgraf.puc-rio.br/eda/EDA_01_ArvBinBusca.pdf · Árvore binária -definição árvorebinária: conjuntofinitode nós Æ(árvorevazia) {raiz,](https://reader033.vdocuments.pub/reader033/viewer/2022042920/5f6799055131eb2a6c5334ab/html5/thumbnails/23.jpg)
© 2018 DI, PUC-Rio • Estruturas de Dados Avançadas – Versão C++
Busca numa abb
07/03/2018 23
Node* abb::search(int key) {return searchrec(_root, key);
}
Node* Abb::searchrec(Node* node, int key) {if (node == nullptr) return nullptr;else if (node->_key == key) return node;else if (key > node->_key) return searchrec(node->_right, key);else return searchrec(node->_left, key);
}
1. Começe a busca pelo nó raiz
2. Se a árvore for vazia retorne NULL
3. CC se a chave procurada for menor que a chave do nó, procure na sub-árvore à esquerda e responda com a resposta que você receber
4. CC se a chave procurada for maior que a chave do nó, procure na sub-árvore à direita e responda com a resposta quevocê receber
5. CC se for igual responda com o endereçodo nó
![Page 24: Árvore binária -definiçãowebserver2.tecgraf.puc-rio.br/eda/EDA_01_ArvBinBusca.pdf · Árvore binária -definição árvorebinária: conjuntofinitode nós Æ(árvorevazia) {raiz,](https://reader033.vdocuments.pub/reader033/viewer/2022042920/5f6799055131eb2a6c5334ab/html5/thumbnails/24.jpg)
© 2018 DI, PUC-Rio • Estruturas de Dados Avançadas – Versão C++
Busca iterativa numa Abb
15
10
5
15
18
20
25
16 19 22
21
30
19
Busca comoem lista, com o nextvariando
07/03/2018 24
![Page 25: Árvore binária -definiçãowebserver2.tecgraf.puc-rio.br/eda/EDA_01_ArvBinBusca.pdf · Árvore binária -definição árvorebinária: conjuntofinitode nós Æ(árvorevazia) {raiz,](https://reader033.vdocuments.pub/reader033/viewer/2022042920/5f6799055131eb2a6c5334ab/html5/thumbnails/25.jpg)
© 2018 DI, PUC-Rio • Estruturas de Dados Avançadas – Versão C++
Menor nó numa Abb
15
10
5
15
18
20
16 19
07/03/2018 25
![Page 26: Árvore binária -definiçãowebserver2.tecgraf.puc-rio.br/eda/EDA_01_ArvBinBusca.pdf · Árvore binária -definição árvorebinária: conjuntofinitode nós Æ(árvorevazia) {raiz,](https://reader033.vdocuments.pub/reader033/viewer/2022042920/5f6799055131eb2a6c5334ab/html5/thumbnails/26.jpg)
© 2018 DI, PUC-Rio • Estruturas de Dados Avançadas – Versão C++
Menor nó numa Abb
15
10
5
15
18
20
16 19
5
7
07/03/2018 26
![Page 27: Árvore binária -definiçãowebserver2.tecgraf.puc-rio.br/eda/EDA_01_ArvBinBusca.pdf · Árvore binária -definição árvorebinária: conjuntofinitode nós Æ(árvorevazia) {raiz,](https://reader033.vdocuments.pub/reader033/viewer/2022042920/5f6799055131eb2a6c5334ab/html5/thumbnails/27.jpg)
© 2018 DI, PUC-Rio • Estruturas de Dados Avançadas – Versão C++
Menor nó numa Abb
É a chave do nó mais à esquerda da árvore
1. Começando pelo nó raiz
2. Se a árvore for vazia retorne -1
3. Caso contrário, caminhe sempre à esquerda
enquanto o filho esquerdo não for NULL
int Abb::min ( );
07/03/2018 27
![Page 28: Árvore binária -definiçãowebserver2.tecgraf.puc-rio.br/eda/EDA_01_ArvBinBusca.pdf · Árvore binária -definição árvorebinária: conjuntofinitode nós Æ(árvorevazia) {raiz,](https://reader033.vdocuments.pub/reader033/viewer/2022042920/5f6799055131eb2a6c5334ab/html5/thumbnails/28.jpg)
© 2018 DI, PUC-Rio • Estruturas de Dados Avançadas – Versão C++
Menor chave numa Abb
int Abb::min(){
Node* p=_root;
if (p==nullptr) return -1;
while (p->_left!=nullptr) p = p->_left;
return p->_key;
}
07/03/2018 28
![Page 29: Árvore binária -definiçãowebserver2.tecgraf.puc-rio.br/eda/EDA_01_ArvBinBusca.pdf · Árvore binária -definição árvorebinária: conjuntofinitode nós Æ(árvorevazia) {raiz,](https://reader033.vdocuments.pub/reader033/viewer/2022042920/5f6799055131eb2a6c5334ab/html5/thumbnails/29.jpg)
© 2018 DI, PUC-Rio • Estruturas de Dados Avançadas – Versão C++
Sucessor numa Abb
15
10
5
15
18
20
25
16 19 22
21
30
20
Quem é o sucessor de 20?
07/03/2018 29
![Page 30: Árvore binária -definiçãowebserver2.tecgraf.puc-rio.br/eda/EDA_01_ArvBinBusca.pdf · Árvore binária -definição árvorebinária: conjuntofinitode nós Æ(árvorevazia) {raiz,](https://reader033.vdocuments.pub/reader033/viewer/2022042920/5f6799055131eb2a6c5334ab/html5/thumbnails/30.jpg)
© 2018 DI, PUC-Rio • Estruturas de Dados Avançadas – Versão C++
15
10
5
15
18
20
25
16 19 22
21
30
19
Quem é o sucessor de 19?
07/03/2018 30
![Page 31: Árvore binária -definiçãowebserver2.tecgraf.puc-rio.br/eda/EDA_01_ArvBinBusca.pdf · Árvore binária -definição árvorebinária: conjuntofinitode nós Æ(árvorevazia) {raiz,](https://reader033.vdocuments.pub/reader033/viewer/2022042920/5f6799055131eb2a6c5334ab/html5/thumbnails/31.jpg)
© 2018 DI, PUC-Rio • Estruturas de Dados Avançadas – Versão C++
Sucessor numa Abb (next)
1. Ache o o nó que contém a a key;
2. Se não achar return NULL
3. CC se o nó tiver uma sub-árvore à direita, retorne o
mínimo dela
4. CC suba na árvore procurando o primeiro ancestral que seja maior que seu filho. Ou seja, o nó
corrente vai estar na sua sub-árvore à esquerda. Se
nessa busca você chegar na raiz (ancestral NULL),
retorne NULL.
CC = caso contrário
int Abb::next (int key);
07/03/2018 31
![Page 32: Árvore binária -definiçãowebserver2.tecgraf.puc-rio.br/eda/EDA_01_ArvBinBusca.pdf · Árvore binária -definição árvorebinária: conjuntofinitode nós Æ(árvorevazia) {raiz,](https://reader033.vdocuments.pub/reader033/viewer/2022042920/5f6799055131eb2a6c5334ab/html5/thumbnails/32.jpg)
© 2018 DI, PUC-Rio • Estruturas de Dados Avançadas – Versão C++
Sucessor numa Abb (prox)
07/03/2018 32
![Page 33: Árvore binária -definiçãowebserver2.tecgraf.puc-rio.br/eda/EDA_01_ArvBinBusca.pdf · Árvore binária -definição árvorebinária: conjuntofinitode nós Æ(árvorevazia) {raiz,](https://reader033.vdocuments.pub/reader033/viewer/2022042920/5f6799055131eb2a6c5334ab/html5/thumbnails/33.jpg)
© 2018 DI, PUC-Rio • Estruturas de Dados Avançadas – Versão C++
Percorrendo em ordem os nós de uma Abb
Lista* p;
for (p=lst; p!=NULL; p=p->prox) {
…
}
07/03/2018 33
![Page 34: Árvore binária -definiçãowebserver2.tecgraf.puc-rio.br/eda/EDA_01_ArvBinBusca.pdf · Árvore binária -definição árvorebinária: conjuntofinitode nós Æ(árvorevazia) {raiz,](https://reader033.vdocuments.pub/reader033/viewer/2022042920/5f6799055131eb2a6c5334ab/html5/thumbnails/34.jpg)
© 2018 DI, PUC-Rio • Estruturas de Dados Avançadas – Versão C++
Inserção numa Abb
15
10
518
20
25
16 19 22
21
30
17
Insere somentequando houverespaço
07/03/2018 34
![Page 35: Árvore binária -definiçãowebserver2.tecgraf.puc-rio.br/eda/EDA_01_ArvBinBusca.pdf · Árvore binária -definição árvorebinária: conjuntofinitode nós Æ(árvorevazia) {raiz,](https://reader033.vdocuments.pub/reader033/viewer/2022042920/5f6799055131eb2a6c5334ab/html5/thumbnails/35.jpg)
© 2018 DI, PUC-Rio • Estruturas de Dados Avançadas – Versão C++
Inserção numa Abb
15
10
5
15
18
20
25
16 19 22
21
30
17
07/03/2018 35
![Page 36: Árvore binária -definiçãowebserver2.tecgraf.puc-rio.br/eda/EDA_01_ArvBinBusca.pdf · Árvore binária -definição árvorebinária: conjuntofinitode nós Æ(árvorevazia) {raiz,](https://reader033.vdocuments.pub/reader033/viewer/2022042920/5f6799055131eb2a6c5334ab/html5/thumbnails/36.jpg)
© 2018 DI, PUC-Rio • Estruturas de Dados Avançadas – Versão C++
Inserção numa abb
1. Começando pelo nó raiz
2. Se o nó for NULL crie num nó com a chave dada e retorne o endereçodele.
3. CC se a chave dada for maior que a chave corrente:1. o nó tiver uma sub-árvore à direita, insira nela a chave
2. CC crie um nó com a chave dada e este será o filho à direita do nócorrente
4. CC se a chave dada for menor que a chave corrente:1. o nó tiver uma sub-árvore à esquerda, insira nela a chave
2. CC crie um nó com a chave dada e este será o filho à esquerda do nócorrente
5. CC se a chave for igual, troque a informação associada à chave (naárvore de inteiros não faça nada)
Abb* abb_insere (Abb* r, int val);
07/03/2018 36
![Page 37: Árvore binária -definiçãowebserver2.tecgraf.puc-rio.br/eda/EDA_01_ArvBinBusca.pdf · Árvore binária -definição árvorebinária: conjuntofinitode nós Æ(árvorevazia) {raiz,](https://reader033.vdocuments.pub/reader033/viewer/2022042920/5f6799055131eb2a6c5334ab/html5/thumbnails/37.jpg)
© 2018 DI, PUC-Rio • Estruturas de Dados Avançadas – Versão C++07/03/2018 37
Inserção recursiva numa abb
![Page 38: Árvore binária -definiçãowebserver2.tecgraf.puc-rio.br/eda/EDA_01_ArvBinBusca.pdf · Árvore binária -definição árvorebinária: conjuntofinitode nós Æ(árvorevazia) {raiz,](https://reader033.vdocuments.pub/reader033/viewer/2022042920/5f6799055131eb2a6c5334ab/html5/thumbnails/38.jpg)
© 2018 DI, PUC-Rio • Estruturas de Dados Avançadas – Versão C++07/03/2018 38
Inserção iterativa numa abb
1. Se a árvore for vazia crie um nó e retorne
2. CC começe a busca pelo nó raiz, desça na árvore mantendo o
nó anterior (pai)
3. Enquanto o nó não for NULL ou não contiver a chave dada:
1. Se a chave do nó for maior que a chave dada, vá para o filho à
direita
2. Se a chave do nó for menor que a chave dada, vá para o filho à
esquerda
4. Crie o nó com a chave dada e o coloque como filho do pai
Abb* abb_insere_iterativa (Abb* r, int val);
07/03/2018 38
![Page 39: Árvore binária -definiçãowebserver2.tecgraf.puc-rio.br/eda/EDA_01_ArvBinBusca.pdf · Árvore binária -definição árvorebinária: conjuntofinitode nós Æ(árvorevazia) {raiz,](https://reader033.vdocuments.pub/reader033/viewer/2022042920/5f6799055131eb2a6c5334ab/html5/thumbnails/39.jpg)
© 2018 DI, PUC-Rio • Estruturas de Dados Avançadas – Versão C++07/03/2018 39
Inserção recursiva numa abb
![Page 40: Árvore binária -definiçãowebserver2.tecgraf.puc-rio.br/eda/EDA_01_ArvBinBusca.pdf · Árvore binária -definição árvorebinária: conjuntofinitode nós Æ(árvorevazia) {raiz,](https://reader033.vdocuments.pub/reader033/viewer/2022042920/5f6799055131eb2a6c5334ab/html5/thumbnails/40.jpg)
© 2018 DI, PUC-Rio • Estruturas de Dados Avançadas – Versão C++
Três casos:
1. nó folha
2. nó possui uma sub-árvore
3. nó possui duas sub-árvores
Remoção de um nó de uma abb
07/03/2018 40
............. ... . ... . . . ..... .. .... .. . ..... .... . ..
![Page 41: Árvore binária -definiçãowebserver2.tecgraf.puc-rio.br/eda/EDA_01_ArvBinBusca.pdf · Árvore binária -definição árvorebinária: conjuntofinitode nós Æ(árvorevazia) {raiz,](https://reader033.vdocuments.pub/reader033/viewer/2022042920/5f6799055131eb2a6c5334ab/html5/thumbnails/41.jpg)
© 2018 DI, PUC-Rio • Estruturas de Dados Avançadas – Versão C++
Remoção numa Abb
15
10
518
20
25
16 19 22
21
30
19
07/03/2018 41
![Page 42: Árvore binária -definiçãowebserver2.tecgraf.puc-rio.br/eda/EDA_01_ArvBinBusca.pdf · Árvore binária -definição árvorebinária: conjuntofinitode nós Æ(árvorevazia) {raiz,](https://reader033.vdocuments.pub/reader033/viewer/2022042920/5f6799055131eb2a6c5334ab/html5/thumbnails/42.jpg)
© 2018 DI, PUC-Rio • Estruturas de Dados Avançadas – Versão C++
Remoção numa Abb
15
10
5
20
18 25
16 22
21
30
07/03/2018 42
![Page 43: Árvore binária -definiçãowebserver2.tecgraf.puc-rio.br/eda/EDA_01_ArvBinBusca.pdf · Árvore binária -definição árvorebinária: conjuntofinitode nós Æ(árvorevazia) {raiz,](https://reader033.vdocuments.pub/reader033/viewer/2022042920/5f6799055131eb2a6c5334ab/html5/thumbnails/43.jpg)
© 2018 DI, PUC-Rio • Estruturas de Dados Avançadas – Versão C++
Remoção numa Abb
15
10
518
20
25
16 19 22
21
30
22
07/03/2018 43
![Page 44: Árvore binária -definiçãowebserver2.tecgraf.puc-rio.br/eda/EDA_01_ArvBinBusca.pdf · Árvore binária -definição árvorebinária: conjuntofinitode nós Æ(árvorevazia) {raiz,](https://reader033.vdocuments.pub/reader033/viewer/2022042920/5f6799055131eb2a6c5334ab/html5/thumbnails/44.jpg)
© 2018 DI, PUC-Rio • Estruturas de Dados Avançadas – Versão C++
Remoção numa Abb
07/03/2018 44
15
10
518
20
25
16 19
21
30
22
![Page 45: Árvore binária -definiçãowebserver2.tecgraf.puc-rio.br/eda/EDA_01_ArvBinBusca.pdf · Árvore binária -definição árvorebinária: conjuntofinitode nós Æ(árvorevazia) {raiz,](https://reader033.vdocuments.pub/reader033/viewer/2022042920/5f6799055131eb2a6c5334ab/html5/thumbnails/45.jpg)
© 2018 DI, PUC-Rio • Estruturas de Dados Avançadas – Versão C++
Remoção numa Abb
15
10
518
20
25
16 19 22
21
30
20
07/03/2018 45
![Page 46: Árvore binária -definiçãowebserver2.tecgraf.puc-rio.br/eda/EDA_01_ArvBinBusca.pdf · Árvore binária -definição árvorebinária: conjuntofinitode nós Æ(árvorevazia) {raiz,](https://reader033.vdocuments.pub/reader033/viewer/2022042920/5f6799055131eb2a6c5334ab/html5/thumbnails/46.jpg)
© 2018 DI, PUC-Rio • Estruturas de Dados Avançadas – Versão C++
Remoção numa Abb
15
10
518
20
25
16 19 22
21
30
20
Quem é o sucessor de 20?
07/03/2018 46
![Page 47: Árvore binária -definiçãowebserver2.tecgraf.puc-rio.br/eda/EDA_01_ArvBinBusca.pdf · Árvore binária -definição árvorebinária: conjuntofinitode nós Æ(árvorevazia) {raiz,](https://reader033.vdocuments.pub/reader033/viewer/2022042920/5f6799055131eb2a6c5334ab/html5/thumbnails/47.jpg)
© 2018 DI, PUC-Rio • Estruturas de Dados Avançadas – Versão C++
Remoção numa Abb
15
10
518
21
25
16 19 22 30
07/03/2018 47
![Page 48: Árvore binária -definiçãowebserver2.tecgraf.puc-rio.br/eda/EDA_01_ArvBinBusca.pdf · Árvore binária -definição árvorebinária: conjuntofinitode nós Æ(árvorevazia) {raiz,](https://reader033.vdocuments.pub/reader033/viewer/2022042920/5f6799055131eb2a6c5334ab/html5/thumbnails/48.jpg)
© 2018 DI, PUC-Rio • Estruturas de Dados Avançadas – Versão C++
Remoção numa Abb
15
10
518
21
25
16 19 22 30
50
07/03/2018 48
![Page 49: Árvore binária -definiçãowebserver2.tecgraf.puc-rio.br/eda/EDA_01_ArvBinBusca.pdf · Árvore binária -definição árvorebinária: conjuntofinitode nós Æ(árvorevazia) {raiz,](https://reader033.vdocuments.pub/reader033/viewer/2022042920/5f6799055131eb2a6c5334ab/html5/thumbnails/49.jpg)
© 2018 DI, PUC-Rio • Estruturas de Dados Avançadas – Versão C++
Três casos:
1. nó folha ou possui apenas uma sub-árvorepromove a sub-árvore
2. nó possui duas sub-árvores
Remoção de um nó de uma abb
07/03/2018 49
15
303
1
15
3010
3
15
3010
3
![Page 50: Árvore binária -definiçãowebserver2.tecgraf.puc-rio.br/eda/EDA_01_ArvBinBusca.pdf · Árvore binária -definição árvorebinária: conjuntofinitode nós Æ(árvorevazia) {raiz,](https://reader033.vdocuments.pub/reader033/viewer/2022042920/5f6799055131eb2a6c5334ab/html5/thumbnails/50.jpg)
© 2018 DI, PUC-Rio • Estruturas de Dados Avançadas – Versão C++
Três casos:
1. nó folha
2. nó possui uma sub-árvore
3. nó possui duas sub-árvores1. coloque a informação do sucessor no nó
2. remova o sucessor
Remoção de um nó de uma abb
07/03/2018 50
............. ... . ... . . . ..... .. .... .. . ..... .... . ..
15
3010
3 12
11 13
15
3011
3 12
10 13
15
3011
3 12
13
3
![Page 51: Árvore binária -definiçãowebserver2.tecgraf.puc-rio.br/eda/EDA_01_ArvBinBusca.pdf · Árvore binária -definição árvorebinária: conjuntofinitode nós Æ(árvorevazia) {raiz,](https://reader033.vdocuments.pub/reader033/viewer/2022042920/5f6799055131eb2a6c5334ab/html5/thumbnails/51.jpg)
© 2018 DI, PUC-Rio • Estruturas de Dados Avançadas – Versão C++
Remoção de um nó numa abb
1. Ache o nó a ser removido
2. Se ele tiver um ou menos filhos, faça a
ligação avô-neto
3. CC se ele tiver dois filhos, procure o
sucessor, troque a info do nó pela do seu
sucessor. Apague o sucessor.
07/03/2018 51
![Page 52: Árvore binária -definiçãowebserver2.tecgraf.puc-rio.br/eda/EDA_01_ArvBinBusca.pdf · Árvore binária -definição árvorebinária: conjuntofinitode nós Æ(árvorevazia) {raiz,](https://reader033.vdocuments.pub/reader033/viewer/2022042920/5f6799055131eb2a6c5334ab/html5/thumbnails/52.jpg)
© 2018 DI, PUC-Rio • Estruturas de Dados Avançadas – Versão C++
Remoção de um nó numa abb (obs)
1. O sucessor é sempre o nó de menor chave
da sub-arvore à direita
2. Ao retirar um nó temos que atualizar os
campos de seu pai e de seu filho para que
eles se referenciem
07/03/2018 52
![Page 53: Árvore binária -definiçãowebserver2.tecgraf.puc-rio.br/eda/EDA_01_ArvBinBusca.pdf · Árvore binária -definição árvorebinária: conjuntofinitode nós Æ(árvorevazia) {raiz,](https://reader033.vdocuments.pub/reader033/viewer/2022042920/5f6799055131eb2a6c5334ab/html5/thumbnails/53.jpg)
© 2018 DI, PUC-Rio • Estruturas de Dados Avançadas – Versão C++
Exemplo
07/03/2018 53
Abb a(7); a.insert(4);
a.insert(9);
a.insert(2);
a.insert(5);
a.insert(8);
a.insert(10);
a.insert(1);
a.insert(3);
a.insert(6);
10
9
8
7
5
4
3
2
1 6
![Page 54: Árvore binária -definiçãowebserver2.tecgraf.puc-rio.br/eda/EDA_01_ArvBinBusca.pdf · Árvore binária -definição árvorebinária: conjuntofinitode nós Æ(árvorevazia) {raiz,](https://reader033.vdocuments.pub/reader033/viewer/2022042920/5f6799055131eb2a6c5334ab/html5/thumbnails/54.jpg)
© 2018 DI, PUC-Rio • Estruturas de Dados Avançadas – Versão C++
Árvore binária de busca degenerada
todos nós não terminais possuem 1 filho
qualquer nó pode ser alcançado
a partir da raiz em O(n) passos
07/03/2018 54
10
9
8
7
6
5
4
3
2
1
1
10
2
9
3
8
4
7
5
6
![Page 55: Árvore binária -definiçãowebserver2.tecgraf.puc-rio.br/eda/EDA_01_ArvBinBusca.pdf · Árvore binária -definição árvorebinária: conjuntofinitode nós Æ(árvorevazia) {raiz,](https://reader033.vdocuments.pub/reader033/viewer/2022042920/5f6799055131eb2a6c5334ab/html5/thumbnails/55.jpg)
© 2018 DI, PUC-Rio • Estruturas de Dados Avançadas – Versão C++
Árvore binária de busca balanceada
|he-hd| £ 1he = altura da sub-árvore esquerda
hd = altura da sub-árvore direita
qualquer nó pode ser alcançado a partir da raiz em O(log(n)) passos
(quase) todos os nós não terminaistêm dois filhos
07/03/2018 55
10
9
8
7
5
4
3
2
1 6