55
Árvore binária - definição árvore binária: conjunto finito de nós Æ (árvore vazia) {raiz, sub-árvore esquerda, sub-árvore direita}, onde sae 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

Á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,

  • Upload
    others

  • View
    11

  • Download
    0

Embed Size (px)

Citation preview

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,

Á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,

Á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,

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,

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,

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,

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,

*

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,

*

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,

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,

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,

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,

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,

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,

Á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,

Á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,

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,

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,

© 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,

© 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,

© 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,

© 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,

© 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,

© 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,

© 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,

© 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,

© 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,

© 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,

© 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,

© 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,

© 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,

© 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,

© 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,

© 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,

© 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,

© 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,

© 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,

© 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,

© 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,

© 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,

© 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,

© 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,

© 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,

© 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,

© 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,

© 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,

© 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,

© 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,

© 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,

© 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,

© 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,

© 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,

© 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,

© 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,

© 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,

© 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