Arvores-Parte1

49
Árvores Árvores

Transcript of Arvores-Parte1

Page 1: Arvores-Parte1

ÁrvoresÁrvores

Page 2: Arvores-Parte1

ÁrvoresÁrvores

As listas encadeadas usualmente fornecem maior flexibilidade que As listas encadeadas usualmente fornecem maior flexibilidade que as matrizes, mas são estruturas lineares e é difícil usá-las para as matrizes, mas são estruturas lineares e é difícil usá-las para organizar uma representação hierárquica de objetos. organizar uma representação hierárquica de objetos.

As pilhas e as filas apresentam hierarquia limitada a uma dimensão.As pilhas e as filas apresentam hierarquia limitada a uma dimensão.

Para superar essa limitação as árvores são estruturas próprias para Para superar essa limitação as árvores são estruturas próprias para a representação de hierarquia.a representação de hierarquia.

As árvores consistem de nós e arcos.As árvores consistem de nós e arcos.

As árvores são representadas de cima para baixo com a raiz no topo As árvores são representadas de cima para baixo com a raiz no topo e as folhas na base.e as folhas na base.

A raiz é um nó que não tem ancestrais tem somente filhos.A raiz é um nó que não tem ancestrais tem somente filhos.

As folhas não têm descendentes.As folhas não têm descendentes.

Page 3: Arvores-Parte1

ÁrvoresÁrvoresUma árvore T é um conjunto finito e não-vazio de nósUma árvore T é um conjunto finito e não-vazio de nós

T= {r} T= {r} T T1 1 T T2 2 . . . . . . T Tn,n,

com as seguintes propriedades:com as seguintes propriedades:

1.1. um nó especial da árvore, r, é chamado de raiz da árvore; eum nó especial da árvore, r, é chamado de raiz da árvore; e

2.2. o restante dos nós é particionado o restante dos nós é particionado n n 0 0 subconjuntos, subconjuntos, TT1 1 ,, TT2 2 ,, …, T…, Tn n ,, cada cada um dos quais sendo uma árvore.um dos quais sendo uma árvore.

A definição de uma árvore é recursiva, uma árvore é definida em A definição de uma árvore é recursiva, uma árvore é definida em termos dela mesmo.termos dela mesmo.

Não há o problema de recursão infinita porque toda árvore tem um Não há o problema de recursão infinita porque toda árvore tem um número finito de nós e no caso base uma árvore tem número finito de nós e no caso base uma árvore tem n=0n=0 subárvores.subárvores.

Uma árvore minimal é composta de um único nó, a raiz.Uma árvore minimal é composta de um único nó, a raiz.

Page 4: Arvores-Parte1

ÁrvoresÁrvores

A

B

C

D

E G

H J MF

I K L

Ta Tb Tc

Ta = {A}, Ta é uma árvore minimal

Tb = {B,{C}}

Tc = {D,{E,{F}},{G,{H,{I}},{J,{K},{L}},{M}}}

Page 5: Arvores-Parte1

ÁrvoresÁrvoresOO grau grau de um nó é o número de subárvores do nó.de um nó é o número de subárvores do nó.

Um nó de grau zero não possui subárvores.Um nó de grau zero não possui subárvores.

Cada raiz Cada raiz r ri i da subárvore da subárvore TTii é chamada de é chamada de filhofilho de de rr..

A definição de uma árvore não impõem qualquer A definição de uma árvore não impõem qualquer condição sobre o número de filhos de um nó.condição sobre o número de filhos de um nó.

O número de filhos de um nó pode variar de 0 a O número de filhos de um nó pode variar de 0 a qualquer inteiro.qualquer inteiro.

O nó raiz é o O nó raiz é o paipai de todas as raízes de todas as raízes rrii das das subárvores subárvores TTii, , 1 < i 1 < i n. n.

Page 6: Arvores-Parte1

ÁrvoresÁrvoresDuas raízesDuas raízes r ri i ee rrj j das subárvores distintasdas subárvores distintas TTi i ee TTj j dede

TTi i sãosão ditas ditas irmãsirmãs..

Dada uma árvore Dada uma árvore TT que contém um conjunto de que contém um conjunto de nós, um nós, um caminhocaminho em em T T é definido como uma é definido como uma seqüência não vazia de nós ou arcosseqüência não vazia de nós ou arcos

P={rP={r11,, rr22,…,,…, rrkk}}

parapara 1 1 i i k k tal que otal que o i- i-ésimo nó da seqüência,ésimo nó da seqüência, rrii,,é o pai doé o pai do (i+1)- (i+1)-ésimo nó da seqüênciaésimo nó da seqüência r ri+1i+1..

O número de arcos em um caminho é chamado de O número de arcos em um caminho é chamado de comprimento do caminhocomprimento do caminho P P ee é definido por é definido por k-1.k-1.

Page 7: Arvores-Parte1

ÁrvoresÁrvores

Na árvore T há 29 caminhos diferentes incluindo os caminhos de Na árvore T há 29 caminhos diferentes incluindo os caminhos de comprimento 0; os caminhos de comprimento 1, e os caminhos de comprimento 0; os caminhos de comprimento 1, e os caminhos de comprimento 3. comprimento 3.

D

E G

H J MF

I K L

Page 8: Arvores-Parte1

ÁrvoresÁrvoresO O nívelnível ou ou profundidadeprofundidade de um nó de um nó rri i R R da árvore da árvore TT é o comprimento é o comprimento

do único caminhodo único caminho emem T T entre a raizentre a raiz r r e oe o nó nó rrii . .

A raiz A raiz T T está no nível 0 e as raízes das subárvores estão no nível 1. está no nível 0 e as raízes das subárvores estão no nível 1.

A A alturaaltura de um nó de um nó rri i R R numa árvore numa árvore T T é o comprimento do caminho é o comprimento do caminho

mais longo do nó mais longo do nó rri i a uma folha.a uma folha.

Folhas têm altura igual a 0.Folhas têm altura igual a 0.

A altura de uma árvore A altura de uma árvore T T é a altura do nó raiz é a altura do nó raiz rrii..

A árvore vazia é uma árvore legítima de altura 0 (por definição)A árvore vazia é uma árvore legítima de altura 0 (por definição)

Numa árvore Numa árvore TT o nó o nó rri i é um é um ancestral ancestral do nó do nó rrj j se existe um caminho em se existe um caminho em

T T de de rrii a a rrj j . .

Numa árvore Numa árvore TT o nó o nó rrj j é um é um descendente descendente do nó do nó rri i se existe um caminho se existe um caminho

em em T T de de rrii a a rrj j . .

Page 9: Arvores-Parte1

ÁrvoresÁrvoresUma árvore pode ser representada como um conjunto de Uma árvore pode ser representada como um conjunto de reuniões aninhadas no plano (Diagrama de Venn).reuniões aninhadas no plano (Diagrama de Venn).

D

E

F H J M

I K L

G

Page 10: Arvores-Parte1

Árvores N-áriasÁrvores N-áriasUma variação de árvores na qual todos os nós têm exatamente o Uma variação de árvores na qual todos os nós têm exatamente o mesmo grau.mesmo grau.

Não é possível construir uma árvore com um número finito de nós, Não é possível construir uma árvore com um número finito de nós, todos com o mesmo grau todos com o mesmo grau NN, exceto se , exceto se N=0N=0..

Uma árvore Uma árvore N-ária N-ária T T é um conjunto finito de nós com as seguintes é um conjunto finito de nós com as seguintes propriedades:propriedades:

1.1. O conjunto é vazio, O conjunto é vazio, T=T=; ; ouou

2.2. O conjunto consiste numa raiz, O conjunto consiste numa raiz, RR, e exatamente , e exatamente NN árvores N-árias distintas. árvores N-árias distintas. Os nós remanescentes podem ser particionados em Os nós remanescentes podem ser particionados em N N 0 0 subconjuntos, subconjuntos, TT00, T, T11,…, T,…, TN-1N-1, cada um deles uma árvore N-ária tal que , cada um deles uma árvore N-ária tal que T={R,T={R, TT00, T, T11,…, ,…,

TTN-1 N-1 }}..

Assim, os nós de uma árvore N-ária possuem grau Assim, os nós de uma árvore N-ária possuem grau 00 ou ou NN..

Page 11: Arvores-Parte1

Árvores N-áriasÁrvores N-árias

A árvore vazia A árvore vazia T=T= é uma árvore, um objeto do é uma árvore, um objeto do mesmo tipo que a árvore não vazia.mesmo tipo que a árvore não vazia.

Num projeto orientado a objetos, uma árvore vazia Num projeto orientado a objetos, uma árvore vazia deve ser a instância de alguma classe de objetos.deve ser a instância de alguma classe de objetos.

As árvores vazias são chamadas de nós externos As árvores vazias são chamadas de nós externos por não possuírem subárvores e por isso aparecem por não possuírem subárvores e por isso aparecem nas extremidades das árvores.nas extremidades das árvores.

As árvores não vazias são chamadas de nós As árvores não vazias são chamadas de nós internos.internos.

Page 12: Arvores-Parte1

Árvores ternáriasÁrvores ternárias

AB

C

D

G

J

LK

M

E

F H

I

Page 13: Arvores-Parte1

Árvores N-áriasÁrvores N-árias

Os quadrados representam árvores vazias e os círculos denotam Os quadrados representam árvores vazias e os círculos denotam os nós não vazios.os nós não vazios.

As árvores cujas subárvores estão ordenadas são As árvores cujas subárvores estão ordenadas são árvores árvores ordenadasordenadas..

As árvores cuja ordenação não é importante são chamadas de As árvores cuja ordenação não é importante são chamadas de árvores orientadasárvores orientadas..

Page 14: Arvores-Parte1

Árvores BináriasÁrvores BináriasUma árvore binária é uma árvore N-ária para a qual Uma árvore binária é uma árvore N-ária para a qual N=2.N=2.

Uma árvore binária Uma árvore binária TT é um conjunto finito de nós com as seguintes é um conjunto finito de nós com as seguintes propriedades:propriedades:

1.1. O conjunto é vazio, O conjunto é vazio, T=T=; ou; ou

2.2. O conjunto consiste em uma raiz, O conjunto consiste em uma raiz, rr, e em exatamente duas árvores binárias , e em exatamente duas árvores binárias distintas distintas TTLL e e TTRR, T={r, T, T={r, TL L , T, TRR}.}.

A árvoreA árvore T TL L é dita a subárvore da esquerda e a árvoreé dita a subárvore da esquerda e a árvore TTR R é dita a é dita a

subárvore da direita.subárvore da direita.

Uma árvore binária com Uma árvore binária com n n 0 0 nós internos contém nós internos contém n+1 n+1 nós nós externos, pois uma árvore N-ária contém externos, pois uma árvore N-ária contém (N-1)n+1(N-1)n+1 nós externos. nós externos.

Page 15: Arvores-Parte1

Percurso em ÁrvoresPercurso em Árvores

Grande parte dos algoritmos para a manipulação de Grande parte dos algoritmos para a manipulação de árvores têm a característica comum de visitar árvores têm a característica comum de visitar sistematicamente todos os nós das árvores. sistematicamente todos os nós das árvores.

O processo de visitação dos nós da árvore é chamado O processo de visitação dos nós da árvore é chamado de percurso em árvore.de percurso em árvore.

Há duas formas para a realização de um percurso:Há duas formas para a realização de um percurso:

percurso em profundidade epercurso em profundidade e

percurso em largura.percurso em largura.

Page 16: Arvores-Parte1

Percurso em profundidadePercurso em profundidade

Alguns Alguns percursos em profundidadepercursos em profundidade possuem nomes possuem nomes específicos:específicos:

percurso em pré-ordem,percurso em pré-ordem,

percurso em pós-ordem e percurso em pós-ordem e

percurso em ordem simétrica.percurso em ordem simétrica.

A

B D

E HC

F G I

Page 17: Arvores-Parte1

Percurso em profundidadePercurso em profundidade

Percurso em pré-ordemPercurso em pré-ordem A raiz é primeiro nó a ser visitado. A raiz é primeiro nó a ser visitado. O percurso é definido recursivamente.O percurso é definido recursivamente.

1.1. Visite o nó raiz.Visite o nó raiz.2.2. Percorra em pré-ordem cada uma das subárvores da raiz Percorra em pré-ordem cada uma das subárvores da raiz

na ordem definida.na ordem definida.

Para uma árvore binária:Para uma árvore binária:

1.1. Visite o nó raiz.Visite o nó raiz.2.2. Percorra em pré-ordem a subárvore esquerda.Percorra em pré-ordem a subárvore esquerda.3.3. Percorra em pré-ordem a subárvore direita.Percorra em pré-ordem a subárvore direita.

Ex: A, B, C, D, E, F, G, H, IEx: A, B, C, D, E, F, G, H, I

Page 18: Arvores-Parte1

Percurso em profundidadePercurso em profundidade

Percurso em pós-ordemPercurso em pós-ordem A raiz é último nó a ser visitado. A raiz é último nó a ser visitado. O percurso é definido recursivamente.O percurso é definido recursivamente.

1.1. Percorra em pós-ordem cada uma das subárvores da raiz Percorra em pós-ordem cada uma das subárvores da raiz na ordem definida.na ordem definida.

2.2. Visite o nó raiz.Visite o nó raiz.

Para uma árvore binária:Para uma árvore binária:

1.1. Percorra em pós-ordem a subárvore esquerda.Percorra em pós-ordem a subárvore esquerda.2.2. Percorra em pós-ordem a subárvore direita.Percorra em pós-ordem a subárvore direita.3.3. Visite o nó raiz.Visite o nó raiz.

Ex: C, B, F, G, E, I, H, D, AEx: C, B, F, G, E, I, H, D, A

A

B D

E HC

F G I

Page 19: Arvores-Parte1

Percurso em profundidadePercurso em profundidade

Percurso em Ordem Simétrica (in-ordem)Percurso em Ordem Simétrica (in-ordem) O nó raiz é visitado entre as visitas das subárvores O nó raiz é visitado entre as visitas das subárvores

esquerda e direita.esquerda e direita. O percurso só faz sentido em árvores binárias.O percurso só faz sentido em árvores binárias.

1.1. Percorra a subárvore esquerda.Percorra a subárvore esquerda.

2.2. Visite o nó raiz.Visite o nó raiz.

3.3. Percorra a subárvore direita.Percorra a subárvore direita.

Ex: B, C, A, F, E, G, D, I, HEx: B, C, A, F, E, G, D, I, H

A

B D

E HC

F G I

Page 20: Arvores-Parte1

Percurso em Largura ou ExtensãoPercurso em Largura ou ExtensãoO percurso em extensão visita os nós na ordem dos níveis da árvore de O percurso em extensão visita os nós na ordem dos níveis da árvore de cima para baixo ou de baixo para cima.cima para baixo ou de baixo para cima.

Pode-se visitar os nós em cada nível da esquerda para a direita ou da Pode-se visitar os nós em cada nível da esquerda para a direita ou da direita para esquerda.direita para esquerda.

Há 4 possibilidades.Há 4 possibilidades.

Ex: A, B, D, C, E, H, F, G, IEx: A, B, D, C, E, H, F, G, I

A

B D

E HC

F G I

nível 0

nível 1

nível 2

nível 3

Page 21: Arvores-Parte1

ExercíciosExercícios

a)a) Quais nós são folhas. Qual é o nó raiz.Quais nós são folhas. Qual é o nó raiz.b)b) Que nó é pai de “C”. Quais são os filhos de “C”.Que nó é pai de “C”. Quais são os filhos de “C”.c)c) Quais são os antecessores de “E”. Quais os sucessores de “E”.Quais são os antecessores de “E”. Quais os sucessores de “E”.d)d) Qual a profundidade de “C”. Qual a altura de “C”.Qual a profundidade de “C”. Qual a altura de “C”.e)e) Quantos caminhos diferentes existem. Quais são eles.Quantos caminhos diferentes existem. Quais são eles.f)f) Liste os nós em Preorder, Inorder, Postorder.Liste os nós em Preorder, Inorder, Postorder.

M N

I J K L

F G H

C

D E

B

A

Page 22: Arvores-Parte1

Implementação de árvores bináriasImplementação de árvores bináriasAs árvores binárias podem ser implementadas como matrizes e como estruturas As árvores binárias podem ser implementadas como matrizes e como estruturas encadeadas.encadeadas.

Para implementar uma árvore como uma lista encadeada um nó é declarado Para implementar uma árvore como uma lista encadeada um nó é declarado como uma estrutura com um campo de informação e dois campos de ponteiros.como uma estrutura com um campo de informação e dois campos de ponteiros.

Os campos de ponteiros contém os índices das células da matriz em que os Os campos de ponteiros contém os índices das células da matriz em que os filhos à esquerda e à direita são armazenados se houver algum.filhos à esquerda e à direita são armazenados se houver algum.

13

10 25

2 12 20 31

29

ÍndiceÍndice InfoInfo Esq.Esq. Dir.Dir.

00 1313 44 2211 3131 66 -1-122 2525 77 1133 1212 -1-1 -1-144 1010 55 3355 22 -1-1 -1-166 2929 -1-1 -1-177 2020 -1-1 -1-1

Page 23: Arvores-Parte1

Implementação de árvores bináriasImplementação de árvores binárias

A implementação de árvores baseadas em matrizes pode ser A implementação de árvores baseadas em matrizes pode ser incoveniente em função da alocação estática.incoveniente em função da alocação estática.

Essa característica é importante pois pode ser difícil prever Essa característica é importante pois pode ser difícil prever quantos nós devem ser criados.quantos nós devem ser criados.

Normalmente uma estrutura de dados dinâmica é o modo Normalmente uma estrutura de dados dinâmica é o modo mais eficiente de representar uma árvore.mais eficiente de representar uma árvore.

Numa estrutura de dados dinâmica um nó é instância de uma Numa estrutura de dados dinâmica um nó é instância de uma classe composta por um membro de informação e dois classe composta por um membro de informação e dois ponteiros que apontem para as subárvores direita e ponteiros que apontem para as subárvores direita e esquerda.esquerda.

Page 24: Arvores-Parte1

Árvores de BuscaÁrvores de Busca

São árvores que suportam operações eficientes de São árvores que suportam operações eficientes de busca, inserção e remoção.busca, inserção e remoção.

A árvore armazena um número finito de chaves a partir A árvore armazena um número finito de chaves a partir de um conjunto de chaves K totalmente ordenado.de um conjunto de chaves K totalmente ordenado.

Cada nó na árvore contém pelo menos uma chave e Cada nó na árvore contém pelo menos uma chave e todas as chaves são diferentes.todas as chaves são diferentes.

Numa árvore de busca há um critério de ordenação de Numa árvore de busca há um critério de ordenação de dados.dados.

Page 25: Arvores-Parte1

Buscas em Árvores de BuscaBuscas em Árvores de Busca

A vantagem principal de uma árvore de busca é que o A vantagem principal de uma árvore de busca é que o critério de ordenação dos dados assegura que não é critério de ordenação dos dados assegura que não é necessário fazer um percurso completo numa árvore necessário fazer um percurso completo numa árvore para encontrar um valor.para encontrar um valor.

Page 26: Arvores-Parte1

Árvores M-Múltiplas de BuscaÁrvores M-Múltiplas de Busca

Uma árvore Uma árvore M-múltipla de busca M-múltipla de busca TT é um conjunto finito de chaves onde é um conjunto finito de chaves onde ou ou T T é vazio ou é vazio ou TT consiste de consiste de nn árvores M-múltiplas de busca árvores M-múltiplas de busca TT00, ,

TT11,... ,T,... ,Tn-1n-1, , ee n-1 n-1 chaves chaves kk11, k, k22,... ,k,... ,kn-1n-1,,

T={TT={T00, k, k11, T, T11, k, k22, T, T22, ... , k, ... , kn-1n-1, T, Tn-1n-1}}

ondeonde 2 2 n n M, M, tal que as chaves e os nós satisfazem as seguintes tal que as chaves e os nós satisfazem as seguintes propriedades de ordenação:propriedades de ordenação:

1.1. As chaves em cada nó são distintas e ordenadas: As chaves em cada nó são distintas e ordenadas: kki i << kki+1 i+1 parapara 1 1 i i n-1. n-1.

2.2. Todas as chaves das subárvoresTodas as chaves das subárvores T Ti-1i-1 são menores do quesão menores do que kki i . . A árvoreA árvore T Ti-1i-1 é dita é dita

a subárvore da esquerda em relação aa subárvore da esquerda em relação a kki i ..

3.3. Todas as chaves das subárvoresTodas as chaves das subárvores T Ti+1i+1 são maiores do quesão maiores do que kki i . . A árvoreA árvore T Ti+1i+1 é dita é dita

a subárvore da direita em relação aa subárvore da direita em relação a kki .i .

Page 27: Arvores-Parte1

Árvores M-Múltiplas de BuscaÁrvores M-Múltiplas de Busca

Cada nó não vazio tem entre 1 e 3 Cada nó não vazio tem entre 1 e 3 chaves e no máximo 4 subárvores.chaves e no máximo 4 subárvores.

AsAs chaves de cada nó estão ordenadas.chaves de cada nó estão ordenadas.

1,3,4

2

6

5,7M=4

Árvore vazia

Page 28: Arvores-Parte1

Árvores Binárias de BuscaÁrvores Binárias de Busca

Uma árvore Uma árvore binária de busca binária de busca TT é um conjunto finito de é um conjunto finito de chaves onde ou chaves onde ou T T é vazio ou é vazio ou TT consiste em uma raiz e em consiste em uma raiz e em exatamente 2 árvores binárias de busca exatamente 2 árvores binárias de busca TTLL ee T TRR , ,

T={r, TT={r, TLL, T, TRR}}

tal que as seguintes propriedades são satisfeitas:tal que as seguintes propriedades são satisfeitas:

1.1. Todas as chaves da subárvoreTodas as chaves da subárvore T TLL são menores do quesão menores do que rr . . A A

árvoreárvore T TLL é dita a subárvore da esquerda em relação aé dita a subárvore da esquerda em relação a rr ..

2.2. Todas as chaves da subárvoreTodas as chaves da subárvore T TRR são maiores do quesão maiores do que rr . . A A

árvoreárvore T TR R é dita a subárvore da direita em relação aé dita a subárvore da direita em relação a rr . .

Page 29: Arvores-Parte1

Árvores Binárias de BuscaÁrvores Binárias de Busca

C

A

B E

D F

G

I

H

Page 30: Arvores-Parte1

Busca numa Árvore de BuscaBusca numa Árvore de BuscaA vantagem principal de uma árvore de busca é o critério de A vantagem principal de uma árvore de busca é o critério de ordenação dos dados. ordenação dos dados.

Não é necessário fazer um percurso completo numa árvore para Não é necessário fazer um percurso completo numa árvore para encontrar um valor.encontrar um valor.

Busca em uma árvore M-múltipla de buscaBusca em uma árvore M-múltipla de busca Na busca de um valor Na busca de um valor xx primeiramente examina-se as chaves do nó primeiramente examina-se as chaves do nó

raiz. raiz. Se Se xx não estiver no nó raiz há 3 possibilidades: não estiver no nó raiz há 3 possibilidades:

xx é menor que é menor que kk1 1 ,, neste caso a busca deve prosseguir na subárvore neste caso a busca deve prosseguir na subárvore TT0 0

;;

xx é maior que é maior que kkn-1 n-1 ,, neste caso a busca deve prosseguir na subárvore neste caso a busca deve prosseguir na subárvore TTn-1 n-1 ;;

Ou existe um Ou existe um ii tal que tal que 1 1 i < n-1 i < n-1 para o qualpara o qual k kii < x < k < x < ki+1i+1, , caso em caso em que a busca deve prosseguir na árvoreque a busca deve prosseguir na árvore T Ti i ..

Page 31: Arvores-Parte1

Busca numa Árvore de BuscaBusca numa Árvore de Busca

Para uma árvore M-múltipla de busca quando Para uma árvore M-múltipla de busca quando xx não não é encontrado em um certo nó, a busca continua é encontrado em um certo nó, a busca continua apenas em uma das subárvores daquele nó.apenas em uma das subárvores daquele nó.

Uma busca com sucesso começa na raiz e percorre Uma busca com sucesso começa na raiz e percorre o caminho até o nó no qual a chave se encontra. o caminho até o nó no qual a chave se encontra.

Quando o objeto de busca não está na árvore, o Quando o objeto de busca não está na árvore, o método de busca descrito traça um caminho da raiz método de busca descrito traça um caminho da raiz até uma subárvore vazia.até uma subárvore vazia.

Page 32: Arvores-Parte1

Percurso em uma árvore binária de Percurso em uma árvore binária de buscabusca

Algoritmo para localizar um elemento em uma árvore Algoritmo para localizar um elemento em uma árvore binária.binária.

Para cada nó compare a chave a ser localizada com o valor Para cada nó compare a chave a ser localizada com o valor armazenado no nó correspondente.armazenado no nó correspondente.

Se a chave for menor vá para a subárvore esquerda.Se a chave for menor vá para a subárvore esquerda.

Se a chave for maior vá para a subárvore direita.Se a chave for maior vá para a subárvore direita.

A busca para quando a chave é igual ao nó.A busca para quando a chave é igual ao nó.

O algoritmo também deverá parar se o valor não for encontrado.O algoritmo também deverá parar se o valor não for encontrado.

Page 33: Arvores-Parte1

Percurso em uma árvore binária de Percurso em uma árvore binária de buscabusca

Para localizar o valor 31 apenas 3 testes são realizados.Para localizar o valor 31 apenas 3 testes são realizados.

O pior caso é quando se busca o valor 29.O pior caso é quando se busca o valor 29.

13

10 25

2 12 20 31

29

Page 34: Arvores-Parte1

Inserção de um nó em uma árvore Inserção de um nó em uma árvore bináriabinária

Inserção de um novo nó (Inserção de um novo nó (n_noden_node))Faz-se Faz-se c_nodec_node = raiz = raiz

Enquanto Enquanto c_node <> c_node <> nulo nulo

{{

Se Se n_noden_node < < c_nodec_node

c_node = c_node = filho esquerdo defilho esquerdo de c_node c_node

Se Se n_noden_node > > c_nodec_node

c_node = c_node = filho direito defilho direito de c_node c_node

}}

AnexarAnexar n_node n_node

filho esquerdo defilho esquerdo de n_node = n_node = nulonulo

filho direito defilho direito de n_node= n_node= nulonulo

Page 35: Arvores-Parte1

Inserção de um nó em uma árvore Inserção de um nó em uma árvore bináriabinária

15 15

4

15

4 20

15

4 20

17

15

4 20

17

19

Page 36: Arvores-Parte1

Inserção de um nó em uma árvore Inserção de um nó em uma árvore bináriabinária

A inserção deve evitar o ocorrência do A inserção deve evitar o ocorrência do mesmo elemento mais de uma vez na árvore.mesmo elemento mais de uma vez na árvore.

Se a inserção de um mesmo elemento for Se a inserção de um mesmo elemento for necessária deve-se indicar a decisão a ser necessária deve-se indicar a decisão a ser tomada em função da aplicação. tomada em função da aplicação.

Page 37: Arvores-Parte1

Remoção de um nó em uma árvore Remoção de um nó em uma árvore bináriabinária

A remoção de um nó é outra operação necessária para se manter A remoção de um nó é outra operação necessária para se manter uma árvore binária de busca.uma árvore binária de busca.

O nível de complexidade depende da posição do nó a ser removido O nível de complexidade depende da posição do nó a ser removido da árvore.da árvore.

Existem 3 casos de remoção de um nó da árvore binária de busca:Existem 3 casos de remoção de um nó da árvore binária de busca: O nó é uma folha e não tem filhos.O nó é uma folha e não tem filhos.

O ponteiro de seu ascendente é ajustado para nulo e o nó é removido. O ponteiro de seu ascendente é ajustado para nulo e o nó é removido. O nó tem um filho.O nó tem um filho.

O ponteiro de seu ascendente é ajustado para apontar para o filho do nó e O ponteiro de seu ascendente é ajustado para apontar para o filho do nó e o nó é removido.o nó é removido.

O nó tem dois filhos.O nó tem dois filhos.Nenhuma operação de uma etapa pode ser realizada pois os ponteiros Nenhuma operação de uma etapa pode ser realizada pois os ponteiros esquerdo e direito do ascendente não podem apontar para ambos os esquerdo e direito do ascendente não podem apontar para ambos os filhos do nó a ser removido.filhos do nó a ser removido.

Page 38: Arvores-Parte1

Remoção de um nó em uma árvore Remoção de um nó em uma árvore bináriabinária

O nó é uma folha e não tem filhos.O nó é uma folha e não tem filhos.

13

10 25

2 20

13

10 25

2

Page 39: Arvores-Parte1

Remoção de um nó em uma árvore Remoção de um nó em uma árvore bináriabinária

O nó tem um filho.O nó tem um filho.

13

10 25

2 20

13

10

2 20

Page 40: Arvores-Parte1

Remoção de um nó em uma árvore Remoção de um nó em uma árvore bináriabinária

Se o nó tem 2 filhos a remoção pode ser feita de duas formas: por Se o nó tem 2 filhos a remoção pode ser feita de duas formas: por fusão ou por cópia.fusão ou por cópia.

Remoção por fusãoRemoção por fusão Uma árvore é extraída de duas subárvores do nó e esta árvore é anexada ao Uma árvore é extraída de duas subárvores do nó e esta árvore é anexada ao

ascendente do nó.ascendente do nó. Os valores da subárvore direita são maiores do que os valores da subárvore Os valores da subárvore direita são maiores do que os valores da subárvore

esquerda.esquerda. Na subárvore da esquerda o nó com o maior valor deve tornar-se ascendente Na subárvore da esquerda o nó com o maior valor deve tornar-se ascendente

da subárvore direita. da subárvore direita. O nó com o maior valor na subárvore da esquerda é o nó mais à direita desta O nó com o maior valor na subárvore da esquerda é o nó mais à direita desta

subárvore.subárvore. Este nó pode ser encontrado movendo-se ao longo da subárvore e tomando-Este nó pode ser encontrado movendo-se ao longo da subárvore e tomando-

se sempre os ponteiros direitos até encontrar-se o valor nulo.se sempre os ponteiros direitos até encontrar-se o valor nulo. Simetricamente na subárvore da direita o nó com o menor valor deve tornar-se Simetricamente na subárvore da direita o nó com o menor valor deve tornar-se

um ascendente da subárvore esquerda.um ascendente da subárvore esquerda.

Page 41: Arvores-Parte1

Remoção de um nó em uma árvore Remoção de um nó em uma árvore binária por fusãobinária por fusão

AlgoritmoAlgoritmo

Se o nó não tem filhos à direitaSe o nó não tem filhos à direita Anexe seu filho da esquerda à seu ascendenteAnexe seu filho da esquerda à seu ascendenteSenãoSenão Se o nó não tem filhos à esquerdaSe o nó não tem filhos à esquerda Anexe seu filho da direita à seu ascendenteAnexe seu filho da direita à seu ascendente Senão {Senão { Mova-se para a esquerdaMova-se para a esquerda Mova-se para a direita até encontrar o valor nuloMova-se para a direita até encontrar o valor nulo O nó encontrado será ascendente da subárvore direitaO nó encontrado será ascendente da subárvore direita }} Remova o nóRemova o nó

Page 42: Arvores-Parte1

Remoção de um nó em uma árvore Remoção de um nó em uma árvore binária por fusãobinária por fusão

13

10 25

2 2011

18 24

26

Nó procurado

Nó a ser removido

13

10 20

2 11 18

26

24

Page 43: Arvores-Parte1

Remoção de um nó em uma árvore Remoção de um nó em uma árvore binária por fusãobinária por fusão

ImplementaçãoImplementação

if (node !=0) { if (node->right==0) node=node->left; else if (node->left==0) node=node->right; else { tmp=node->left; 1 while (tmp->right != 0) tmp=tmp->right; 2 tmp->right = node->right; 3 tmp=node; 4 node = node->left;

5 } delete tmp; 6}

Page 44: Arvores-Parte1

Remoção de um nó em uma árvore Remoção de um nó em uma árvore binária por fusãobinária por fusão

Detalhes de implementaçãoDetalhes de implementação

node

tmp

1

node

tmp2

node

tmp3

nodetmp

4

node

tmp

5

node

6

Page 45: Arvores-Parte1

Remoção de um nó em uma árvore Remoção de um nó em uma árvore binária por cópiabinária por cópia

A remoção por cópia remove uma chave A remoção por cópia remove uma chave kk1 1 sobreescrevendo-a por uma sobreescrevendo-a por uma outra chave outra chave kk2 2 e então removendo o nó que contéme então removendo o nó que contém kk2. 2. e então removendo o e então removendo o nó que contémnó que contém

Se o nó tem 2 filhos ele pode ser reduzido a um dos dois casos simples: ou o Se o nó tem 2 filhos ele pode ser reduzido a um dos dois casos simples: ou o nó é uma folha ou o nó tem somente um filho não-vazio.nó é uma folha ou o nó tem somente um filho não-vazio.

Pode-se substituir a chave que está sendo removida pelo seu predecessor (ou Pode-se substituir a chave que está sendo removida pelo seu predecessor (ou sucessor) imediato.sucessor) imediato.

O predecessor de chave é a chave do nó mais à direita na subárvore da O predecessor de chave é a chave do nó mais à direita na subárvore da esquerda.esquerda.

Analogamente, seu sucessor imediato é a chave do nó mais à esquerda na Analogamente, seu sucessor imediato é a chave do nó mais à esquerda na subárvore da direita.subárvore da direita.

Localiza-se o predecessor a partir da raiz da subárvore esquerda e movendo-se Localiza-se o predecessor a partir da raiz da subárvore esquerda e movendo-se para direita o tanto quanto possível até encontrar o valor nulo.para direita o tanto quanto possível até encontrar o valor nulo.

Substitui-se a chave do predecessor pelo nó a ser removido.Substitui-se a chave do predecessor pelo nó a ser removido. Dessa forma o nó se transforma em uma folha ou antecessor de apenas um filho Dessa forma o nó se transforma em uma folha ou antecessor de apenas um filho

não vazio. não vazio.

Page 46: Arvores-Parte1

Remoção de um nó em uma árvore Remoção de um nó em uma árvore binária por cópiabinária por cópia

13

10 25

2 2011

18 24

26

Nó procurado

Nó a ser removido13

10 24

2 2011

18

26

Page 47: Arvores-Parte1

Remoção de um nó em uma árvore Remoção de um nó em uma árvore binária por cópiabinária por cópia

ImplementaçãoImplementação if (node->right==0) node=node->left; else

if (node->left==0) node=node->right;

else {

tmp=node->left;

prev = node;

while (tmp->right != 0){ 1

prev=tmp; 2

tmp=tmp->right;

}

node->key = tmp->key; 3

if (prev->node==0) prev->left = tmp->left; 4

else prev->right = tmp->left; 5

}

delete tmp;

Page 48: Arvores-Parte1

ExercíciosExercícios

Sobre árvores binárias de pesquisa:Sobre árvores binárias de pesquisa:a)a) Qual a principal propriedade deste tipo de árvore?Qual a principal propriedade deste tipo de árvore?

b)b) Desenhe a árvore binária de pesquisa que resulta da inserção Desenhe a árvore binária de pesquisa que resulta da inserção sucessiva das chaves QUESTAOFCIL em uma árvore sucessiva das chaves QUESTAOFCIL em uma árvore inicialmente vazia.inicialmente vazia.

c)c) Represente a árvore sob a forma de matriz.(slide 22)Represente a árvore sob a forma de matriz.(slide 22)

d)d) Desenhe as árvores resultantes das retiradas dos elementos E Desenhe as árvores resultantes das retiradas dos elementos E e depois U da árvore do item anterior por fusão.e depois U da árvore do item anterior por fusão.

e)e) Desenhe as árvores resultantes das retiradas dos elementos E Desenhe as árvores resultantes das retiradas dos elementos E e depois U da árvore do item anterior por cópia.e depois U da árvore do item anterior por cópia.

Page 49: Arvores-Parte1

Exercícios para apresentar em salaExercícios para apresentar em sala

Elaborar um programa que apresente o seguinte menu:Elaborar um programa que apresente o seguinte menu: Inserção em árvore bináriaInserção em árvore binária Remoção em árvore bináriaRemoção em árvore binária Apresentação da árvore Apresentação da árvore

A árvore deve ser apresentada da seguinte forma: (impressão por A árvore deve ser apresentada da seguinte forma: (impressão por nível)nível)Raiz: 25 FD: 20 FE: 30Raiz: 25 FD: 20 FE: 30Nó 20: FD: 10 FE: 23Nó 20: FD: 10 FE: 23Nó 30: FD: 28 FE: 40Nó 30: FD: 28 FE: 40Nó 10: FD: 5 FE: 15Nó 10: FD: 5 FE: 15Nó 23: FD: -1 FE: -1Nó 23: FD: -1 FE: -1Nó 28: FD: -1 FE: -1Nó 28: FD: -1 FE: -1Nó 40: FD: -1 FE: -1Nó 40: FD: -1 FE: -1Nó 5: FD: -1 FE: -1Nó 5: FD: -1 FE: -1Nó 15: FD: -1 FE: -1Nó 15: FD: -1 FE: -1