ÁRVORESif.ufrgs.br/~thielo/arvores1.pdf · 2019-03-25 · sub-árvores. Assim, a função...

57
ÁRVORES

Transcript of ÁRVORESif.ufrgs.br/~thielo/arvores1.pdf · 2019-03-25 · sub-árvores. Assim, a função...

Page 1: ÁRVORESif.ufrgs.br/~thielo/arvores1.pdf · 2019-03-25 · sub-árvores. Assim, a função “cria” pode ser utilizada para acrescentar (enxertar) uma sub-árvore em um ramo de

ÁRVORES

Page 2: ÁRVORESif.ufrgs.br/~thielo/arvores1.pdf · 2019-03-25 · sub-árvores. Assim, a função “cria” pode ser utilizada para acrescentar (enxertar) uma sub-árvore em um ramo de

SUMÁRIOFundamentosÁrvores BináriasÁrvores Binárias de Busca

2

Page 3: ÁRVORESif.ufrgs.br/~thielo/arvores1.pdf · 2019-03-25 · sub-árvores. Assim, a função “cria” pode ser utilizada para acrescentar (enxertar) uma sub-árvore em um ramo de

ÁRVORESUtilizadas em muitas aplicações Modelam uma hierarquia entre elementosárvore genealógica

Diagrama hierárquico de uma organização

Modelagem de algoritmos

* O conceito de árvores está diretamente ligado à recursão *

3

Page 4: ÁRVORESif.ufrgs.br/~thielo/arvores1.pdf · 2019-03-25 · sub-árvores. Assim, a função “cria” pode ser utilizada para acrescentar (enxertar) uma sub-árvore em um ramo de

ÁRVORESum conjunto finito de elementos ondeum elemento é chamado de raiz

os outros são divididos em subconjuntos disjuntos, onde cada um define uma árvorecada elemento é um nó ou vértice da árvore

arcos ou arestas conectam os vértices

4

Page 5: ÁRVORESif.ufrgs.br/~thielo/arvores1.pdf · 2019-03-25 · sub-árvores. Assim, a função “cria” pode ser utilizada para acrescentar (enxertar) uma sub-árvore em um ramo de

ÁRVORESuma coleção não vazia de vértices e ramos que satisfazem a certos requisitosvértice (ou nó):é um objeto simples que pode ter um nome e mais alguma outra informação associada

arco ou aresta (direcionado ou não):é uma conexão entre dois nós

5

Page 6: ÁRVORESif.ufrgs.br/~thielo/arvores1.pdf · 2019-03-25 · sub-árvores. Assim, a função “cria” pode ser utilizada para acrescentar (enxertar) uma sub-árvore em um ramo de

REPRESENTAÇÃO

6

Á r v o r e

E F

B

G H I

C

L M

O

S

P Q R

N

K

J

C

A

Page 7: ÁRVORESif.ufrgs.br/~thielo/arvores1.pdf · 2019-03-25 · sub-árvores. Assim, a função “cria” pode ser utilizada para acrescentar (enxertar) uma sub-árvore em um ramo de

EXEMPLO

7

Page 8: ÁRVORESif.ufrgs.br/~thielo/arvores1.pdf · 2019-03-25 · sub-árvores. Assim, a função “cria” pode ser utilizada para acrescentar (enxertar) uma sub-árvore em um ramo de

TERMINOLOGIA E PROPRIEDADESCada vértice (exceto a raiz) tem exatamente um antecessor imediato ou paiCada vértice tem nós sucessores imediatos ou filhos, a não ser:nós sem filhos : terminais ou folhas

Filhos de um mesmo pai - irmãosNós com pelo menos um filho : não-terminais ou internos

8

Page 9: ÁRVORESif.ufrgs.br/~thielo/arvores1.pdf · 2019-03-25 · sub-árvores. Assim, a função “cria” pode ser utilizada para acrescentar (enxertar) uma sub-árvore em um ramo de

TERMINOLOGIA E PROPRIEDADEScaminho em uma árvore:é uma lista de vértices distintos e sucessivos, conectados por arcos (arestas) da árvore

nó raizexiste exatamente um caminho entre a raiz e cada um dos nós da árvorese existir mais de um caminho ou nenhum grafo

9

Page 10: ÁRVORESif.ufrgs.br/~thielo/arvores1.pdf · 2019-03-25 · sub-árvores. Assim, a função “cria” pode ser utilizada para acrescentar (enxertar) uma sub-árvore em um ramo de

TERMINOLOGIA E PROPRIEDADESgrau é o número de subárvores de um nó

no exemplo: grau de A é 3; de N é 4; de J é 1

qualquer nó é a raiz de uma sub-árvore consistindo dele e dos nós abaixo

10

Page 11: ÁRVORESif.ufrgs.br/~thielo/arvores1.pdf · 2019-03-25 · sub-árvores. Assim, a função “cria” pode ser utilizada para acrescentar (enxertar) uma sub-árvore em um ramo de

ÁRVORES

11

Á r v o r e ( 1 )

E F

B C

G

D

A

Á r v o r e ( 2 )

C

G

D

E F

B

A

Page 12: ÁRVORESif.ufrgs.br/~thielo/arvores1.pdf · 2019-03-25 · sub-árvores. Assim, a função “cria” pode ser utilizada para acrescentar (enxertar) uma sub-árvore em um ramo de

ÁRVORESA única diferença entre as duas árvores é a ordem das sub-árvoresUma árvore ordenada é definida como uma árvore onde as sub-árvore formam um conjunto ordenado

Em uma árvore ordenada define-se o primeiro, segundo e último irmão, de acordo com alguma propriedade

12

Page 13: ÁRVORESif.ufrgs.br/~thielo/arvores1.pdf · 2019-03-25 · sub-árvores. Assim, a função “cria” pode ser utilizada para acrescentar (enxertar) uma sub-árvore em um ramo de

TERMINOLOGIA os vértices da árvore estão classificados em níveisé o número de nós no caminho entre o vértice e a raiz

13

E F

B

G H I

C

L M

O

S

P Q R

N

K

J

D

A

 nível da raiz é zero

 nível de  C é 1

 nível  de K é 3

 nível de um nó =     nível de seu pai + 1

 nível de P é 5

Page 14: ÁRVORESif.ufrgs.br/~thielo/arvores1.pdf · 2019-03-25 · sub-árvores. Assim, a função “cria” pode ser utilizada para acrescentar (enxertar) uma sub-árvore em um ramo de

TERMINOLOGIAAltura de uma árvore corresponde ao maior nível

maior distância entre a raiz e qualquer nó

Floresta um conjunto de árvores

se removemos a raiz e os arcos que a ligam às sub-árvores, ficamos com uma floresta

14

Page 15: ÁRVORESif.ufrgs.br/~thielo/arvores1.pdf · 2019-03-25 · sub-árvores. Assim, a função “cria” pode ser utilizada para acrescentar (enxertar) uma sub-árvore em um ramo de

ÁRVORES BINÁRIAS15

Page 16: ÁRVORESif.ufrgs.br/~thielo/arvores1.pdf · 2019-03-25 · sub-árvores. Assim, a função “cria” pode ser utilizada para acrescentar (enxertar) uma sub-árvore em um ramo de

DEFINIÇÃOÁrvore Binária T é um conjunto finito de elementos denominados nós ou vértices, tal que:

T = 0 e a árvore é dita vazia ou

Existe um nó r, chamado raiz de T, e os nós restantes podem ser divididos em dois subconjuntos disjuntos, Tre e Trd, que são as sub-árvores esquerda e direita de r, respectivamente e as quais, por sua vez, também são árvores binárias. 16

Page 17: ÁRVORESif.ufrgs.br/~thielo/arvores1.pdf · 2019-03-25 · sub-árvores. Assim, a função “cria” pode ser utilizada para acrescentar (enxertar) uma sub-árvore em um ramo de

VANTAGENSPossuem um número constante de sub-árvores em cada nóLimitação do número de ponteiros usados

Algoritmos eficientes para o tratamentoA forma de armazenar os nós surge naturalmente de sua definição:Ponteiro para o nó raiz (como nas listas lineares)

Ponteiros para os filhos: esq e dir

Necessita de 2n+1 ponteiros para representar n nós.

17

Page 18: ÁRVORESif.ufrgs.br/~thielo/arvores1.pdf · 2019-03-25 · sub-árvores. Assim, a função “cria” pode ser utilizada para acrescentar (enxertar) uma sub-árvore em um ramo de

VISUALIZAÇÃO DA ÁRVORE BINÁRIA USANDO PONTEIROS

raiz

esq dir

A

B C

E FD

G H I

18

Page 19: ÁRVORESif.ufrgs.br/~thielo/arvores1.pdf · 2019-03-25 · sub-árvores. Assim, a função “cria” pode ser utilizada para acrescentar (enxertar) uma sub-árvore em um ramo de

OPERAÇÕES BÁSICAS DA ÁRVORE BINÁRIA (INTERFACE DO TIPO ÁRVORE)Criar uma árvore vaziaCriar uma árvore não vaziaVerificar se a árvore está vaziaVerificar se um elemento pertence a árvoreLiberar uma árvoreImprimir os nós da árvore

19

Page 20: ÁRVORESif.ufrgs.br/~thielo/arvores1.pdf · 2019-03-25 · sub-árvores. Assim, a função “cria” pode ser utilizada para acrescentar (enxertar) uma sub-árvore em um ramo de

IMPLEMENTAÇÃO DE ÁRVORES BINÁRIASO acesso a uma árvore se dará através de um ponteiro para o nó raizA estrutura de um nó deve ser composta por: um campo que guarda a informação e dois ponteiros: um para a sub-árvore da esquerda e um para a sub-árvore da direitaFunções são implementadas utilizando definição recursiva da estrutura 20

Page 21: ÁRVORESif.ufrgs.br/~thielo/arvores1.pdf · 2019-03-25 · sub-árvores. Assim, a função “cria” pode ser utilizada para acrescentar (enxertar) uma sub-árvore em um ramo de

IMPLEMENTAÇÃO DE ÁRVORES BINÁRIAS

21

Arv* arv_criavazia() { return NULL;}

Arv* arv_cria(char c, Arv* sae, Arv* sad) { Arv* a = (Arv*) malloc (sizeof(Arv)); // ou, em C++: // Arv* a = new Arv; a-> info = c; a-> esq=sae; a-> dir = sad; return a;}

Page 22: ÁRVORESif.ufrgs.br/~thielo/arvores1.pdf · 2019-03-25 · sub-árvores. Assim, a função “cria” pode ser utilizada para acrescentar (enxertar) uma sub-árvore em um ramo de

IMPLEMENTAÇÃO DE ÁRVORES BINÁRIASFunção que verifica se elemento pertence a árvore

22

Page 23: ÁRVORESif.ufrgs.br/~thielo/arvores1.pdf · 2019-03-25 · sub-árvores. Assim, a função “cria” pode ser utilizada para acrescentar (enxertar) uma sub-árvore em um ramo de

IMPLEMENTAÇÃO DE ÁRVORES BINÁRIASFunção que libera a estrutura da árvore

Função que verifica se uma árvore está vazia

23

Page 24: ÁRVORESif.ufrgs.br/~thielo/arvores1.pdf · 2019-03-25 · sub-árvores. Assim, a função “cria” pode ser utilizada para acrescentar (enxertar) uma sub-árvore em um ramo de

IMPLEMENTAÇÃO DE ÁRVORES BINÁRIASFunção que imprime elementos da árvore

24

Page 25: ÁRVORESif.ufrgs.br/~thielo/arvores1.pdf · 2019-03-25 · sub-árvores. Assim, a função “cria” pode ser utilizada para acrescentar (enxertar) uma sub-árvore em um ramo de

EXEMPLO DE CRIAÇÃO DE UMA ÁRVORE

25

Page 26: ÁRVORESif.ufrgs.br/~thielo/arvores1.pdf · 2019-03-25 · sub-árvores. Assim, a função “cria” pode ser utilizada para acrescentar (enxertar) uma sub-árvore em um ramo de

EXEMPLO DE USO DA IMPRESSÃO

26

Page 27: ÁRVORESif.ufrgs.br/~thielo/arvores1.pdf · 2019-03-25 · sub-árvores. Assim, a função “cria” pode ser utilizada para acrescentar (enxertar) uma sub-árvore em um ramo de

INSERINDO UMA SUB-ÁRVORE NUMA ÁRVOREDada a árvore

Inserir a sub-árvore

A esquerda do nó b

27

Page 28: ÁRVORESif.ufrgs.br/~thielo/arvores1.pdf · 2019-03-25 · sub-árvores. Assim, a função “cria” pode ser utilizada para acrescentar (enxertar) uma sub-árvore em um ramo de

LIBERANDO UMA SUB-ÁRVORE NUMA ÁRVOREDada a árvore

Liberar a sub-árvore e

28

Page 29: ÁRVORESif.ufrgs.br/~thielo/arvores1.pdf · 2019-03-25 · sub-árvores. Assim, a função “cria” pode ser utilizada para acrescentar (enxertar) uma sub-árvore em um ramo de

CRIAÇÃO E LIBERAÇÃONote que a definição de árvore, por ser recursiva, não faz distinção entre árvores e sub-árvores. Assim, a função “cria” pode ser utilizada para acrescentar (enxertar) uma sub-árvore em um ramo de uma árvore, e libera pode ser usada para remover (“podar”) uma sub-árvore qualquer de uma árvore dada.

29

Page 30: ÁRVORESif.ufrgs.br/~thielo/arvores1.pdf · 2019-03-25 · sub-árvores. Assim, a função “cria” pode ser utilizada para acrescentar (enxertar) uma sub-árvore em um ramo de

PERCURSOS EM ÁRVORES BINÁRIASA busca nada mais é do que um percurso em uma árvoreO percurso em uma árvore visitando cada nó uma única vez gera uma seqüência linear de nósAssim, passa a ter sentido falar em sucessor e predecessor de um nó segundo um determinado percursoHá três maneiras recursivas de se percorrer árvores binárias:Percurso em pré-ordem

Percurso em pós-ordem

Percurso em ordem 30

Page 31: ÁRVORESif.ufrgs.br/~thielo/arvores1.pdf · 2019-03-25 · sub-árvores. Assim, a função “cria” pode ser utilizada para acrescentar (enxertar) uma sub-árvore em um ramo de

PERCURSO EM PRÉ-ORDEMAlgoritmo básico:Se árvore vazia : fim

visitar o nó raiz (imprimí-lo)

percorrer em pré-ordem a sub-árvore esquerda

percorrer em pré-ordem a sub-árvore direita

ABDCEGFHI

31

Page 32: ÁRVORESif.ufrgs.br/~thielo/arvores1.pdf · 2019-03-25 · sub-árvores. Assim, a função “cria” pode ser utilizada para acrescentar (enxertar) uma sub-árvore em um ramo de

PERCURSO EM EM ORDEM Algoritmo básico:Se árvore vazia : fim

percorrer em ordem a sub-árvore esquerda

visitar o nó raiz (imprimí-lo)

percorrer em ordem a sub-árvore direita

DBAEGCHFI

32

Page 33: ÁRVORESif.ufrgs.br/~thielo/arvores1.pdf · 2019-03-25 · sub-árvores. Assim, a função “cria” pode ser utilizada para acrescentar (enxertar) uma sub-árvore em um ramo de

PERCURSO EM PÓS-ORDEM Algoritmo básico:Se árvore vazia : fim

percorrer em ordem a sub-árvore esquerda

percorrer em ordem a sub-árvore direita visitar o nó raiz (imprimí-lo)

DBGEHIFCA

33

Page 34: ÁRVORESif.ufrgs.br/~thielo/arvores1.pdf · 2019-03-25 · sub-árvores. Assim, a função “cria” pode ser utilizada para acrescentar (enxertar) uma sub-árvore em um ramo de

IMPLEMENTAÇÕES DAS OPERAÇÕES

Diversas operações se utilizam desses algoritmos de percurso em árvore durante sua execução:Inserção, Remoção, nível, etc...

Exemplo: Operação Esvaziar: esvaziar toda a árvore

Operação Nível: Implementar uma função para retornar o nível de um elemento na árvore

Observações:Supõe-se que todas as chaves sejam diferentes

34

Page 35: ÁRVORESif.ufrgs.br/~thielo/arvores1.pdf · 2019-03-25 · sub-árvores. Assim, a função “cria” pode ser utilizada para acrescentar (enxertar) uma sub-árvore em um ramo de

ALTURA DE UMA ÁRVOREPropriedade Fundamental de ÁrvoresSó existe um caminho da raiz para qualquer nó

Definição de Altura de ÁrvoreÉ o comprimento do caminho mais longo da raiz até uma das folhas.A altura de uma árvore com um único nó é 0;

A altura da árvore vazia é –1;

A raiz está no nível 0 e seus filhos diretos no nível 1, e assim por diante;

O último nível é o h (que é a altura da árvore)

35

Page 36: ÁRVORESif.ufrgs.br/~thielo/arvores1.pdf · 2019-03-25 · sub-árvores. Assim, a função “cria” pode ser utilizada para acrescentar (enxertar) uma sub-árvore em um ramo de

ÁRVORE CHEIAÁrvore é dita cheia se todos os seus nós internos têm 2 sub-árvores associadas e todos os nós folhas estão no último nível.O número total de nós de uma árvore cheia é dado por 2h+1- 1Uma árvore binária cheia com n nós tem uma altura proporcional a log n

36

Page 37: ÁRVORESif.ufrgs.br/~thielo/arvores1.pdf · 2019-03-25 · sub-árvores. Assim, a função “cria” pode ser utilizada para acrescentar (enxertar) uma sub-árvore em um ramo de

ÁRVORE CHEIA

37

Page 38: ÁRVORESif.ufrgs.br/~thielo/arvores1.pdf · 2019-03-25 · sub-árvores. Assim, a função “cria” pode ser utilizada para acrescentar (enxertar) uma sub-árvore em um ramo de

ÁRVORE DEGENERADAÁrvore é dita degenerada se todos os seus nós internos têm uma única sub-árvore associada.A estrutura hierárquica se degenera em uma estrutura linearUma árvore degenerada de altura h tem h + 1 nósAltura de uma árvore degenerada com n nós é proporcional a n

38

Page 39: ÁRVORESif.ufrgs.br/~thielo/arvores1.pdf · 2019-03-25 · sub-árvores. Assim, a função “cria” pode ser utilizada para acrescentar (enxertar) uma sub-árvore em um ramo de

ÁRVORE DEGENERADA

39

Page 40: ÁRVORESif.ufrgs.br/~thielo/arvores1.pdf · 2019-03-25 · sub-árvores. Assim, a função “cria” pode ser utilizada para acrescentar (enxertar) uma sub-árvore em um ramo de

POR QUÊ CALCULAR A ALTURA?A altura de uma árvore é uma medida de avaliação da eficiência com que visitamos os nós de uma árvoreUma árvore binária com n nós tem uma altura mínima proporcional a log n (caso a árvore seja cheia) e uma altura máxima proporcional a n (caso a árvore seja degenerada)A altura indica o esforço computacional necessário para alcançar qualquer nó da árvore;Em árvores binárias de busca, é importante manter a altura pequena, ou seja, manter a árvore com distribuição dos nós próxima à da árvore cheia. 40

Page 41: ÁRVORESif.ufrgs.br/~thielo/arvores1.pdf · 2019-03-25 · sub-árvores. Assim, a função “cria” pode ser utilizada para acrescentar (enxertar) uma sub-árvore em um ramo de

POR QUÊ CALCULAR A ALTURA?Exemplo de árvore binária de buscaValor da raiz sempre maior que o da sub-árvore da esquerda e menor que o da sub-árvore da direita

Busca de elemento é otimizada

41

Page 42: ÁRVORESif.ufrgs.br/~thielo/arvores1.pdf · 2019-03-25 · sub-árvores. Assim, a função “cria” pode ser utilizada para acrescentar (enxertar) uma sub-árvore em um ramo de

FUNÇÃO PARA CÁLCULO DA ALTURAFunção auxiliar para calcular o máximo entre dois inteiros

Função recursiva para calcular a altura

42

Page 43: ÁRVORESif.ufrgs.br/~thielo/arvores1.pdf · 2019-03-25 · sub-árvores. Assim, a função “cria” pode ser utilizada para acrescentar (enxertar) uma sub-árvore em um ramo de

ÁRVORE BINÁRIA DE BUSCA

Page 44: ÁRVORESif.ufrgs.br/~thielo/arvores1.pdf · 2019-03-25 · sub-árvores. Assim, a função “cria” pode ser utilizada para acrescentar (enxertar) uma sub-árvore em um ramo de

ÁRVORES DE BUSCA BINÁRIAAs árvores de busca binária têm uma propriedade fundamental:o valor associado à raiz é sempre maior que o valor associado a qualquer nó da sub-árvore à esquerda (sae), e é sempre menor que o valor associado a qualquer nó da sub-árvore à direita (sad).

Essa propriedade garante que, quando a árvore é percorrida em ordem infixada (sae - raiz - sad), os valores são encontrados em ordem crescente.

44

Page 45: ÁRVORESif.ufrgs.br/~thielo/arvores1.pdf · 2019-03-25 · sub-árvores. Assim, a função “cria” pode ser utilizada para acrescentar (enxertar) uma sub-árvore em um ramo de

ÁRVORE DE BUSCA BINÁRIA

45

Page 46: ÁRVORESif.ufrgs.br/~thielo/arvores1.pdf · 2019-03-25 · sub-árvores. Assim, a função “cria” pode ser utilizada para acrescentar (enxertar) uma sub-árvore em um ramo de

INTRODUÇÃOPara procurar um valor numa árvore, comparamos o valor que buscamos com o valor associado à raiz.Em caso de igualdadeo valor foi encontrado;

Se o valor procurado for menor que o valor da raiza busca continua na sae;

Se o valor procurado for maior que o valor da raiza busca continua na sad.

46

Page 47: ÁRVORESif.ufrgs.br/~thielo/arvores1.pdf · 2019-03-25 · sub-árvores. Assim, a função “cria” pode ser utilizada para acrescentar (enxertar) uma sub-árvore em um ramo de

TIPO DA ÁRVORE BINÁRIA

47

Page 48: ÁRVORESif.ufrgs.br/~thielo/arvores1.pdf · 2019-03-25 · sub-árvores. Assim, a função “cria” pode ser utilizada para acrescentar (enxertar) uma sub-árvore em um ramo de

OPERAÇÃO DE BUSCA

48

Page 49: ÁRVORESif.ufrgs.br/~thielo/arvores1.pdf · 2019-03-25 · sub-árvores. Assim, a função “cria” pode ser utilizada para acrescentar (enxertar) uma sub-árvore em um ramo de

OPERAÇÃO DE INSERÇÃO

49

Page 50: ÁRVORESif.ufrgs.br/~thielo/arvores1.pdf · 2019-03-25 · sub-árvores. Assim, a função “cria” pode ser utilizada para acrescentar (enxertar) uma sub-árvore em um ramo de

OPERAÇÃO DE REMOÇÃOEssa operação é um pouco mais complexa que a de inserção. Existem três situações possíveis.A primeira é quando se deseja retirar um elemento que é folha da árvore.A segunda situação acontece quando o nó a ser retirado possui um único filho.A terceira situação ocorre quando o nó a ser retirado tem dois filhos.

50

Page 51: ÁRVORESif.ufrgs.br/~thielo/arvores1.pdf · 2019-03-25 · sub-árvores. Assim, a função “cria” pode ser utilizada para acrescentar (enxertar) uma sub-árvore em um ramo de

OPERAÇÃO DE REMOÇÃO- 1ª E 2ª SITUAÇÕES

51

Page 52: ÁRVORESif.ufrgs.br/~thielo/arvores1.pdf · 2019-03-25 · sub-árvores. Assim, a função “cria” pode ser utilizada para acrescentar (enxertar) uma sub-árvore em um ramo de

OPERAÇÃO DE REMOÇÃO- 1ª E 2ª SITUAÇÕES A primeira, e mais simples, é quando se deseja retirar um elemento que é folha da árvore. Neste caso, basta retirar o elemento da árvore e atualizar o pai, pois seu filho não existe mais.

A segunda situação, ainda simples, acontece quando o nó a ser retirado possui um único filho. Para retirar esse elemento é necessário antes acertar o ponteiro do pai, “pulando” o nó: o único neto passa a ser filho direto. 52

Page 53: ÁRVORESif.ufrgs.br/~thielo/arvores1.pdf · 2019-03-25 · sub-árvores. Assim, a função “cria” pode ser utilizada para acrescentar (enxertar) uma sub-árvore em um ramo de

OPERAÇÃO DE REMOÇÃO - 3ª SITUAÇÃO

Localiza o nó a ser eliminado (nó 6)Encontra o nó mais a direita da sub-árvore da esquerda (nó 4)Trocar os valores entre o nó a ser eliminado e o nó encontrado.Localiza novamente o nó a ser eliminado (nó 6)

53

Page 54: ÁRVORESif.ufrgs.br/~thielo/arvores1.pdf · 2019-03-25 · sub-árvores. Assim, a função “cria” pode ser utilizada para acrescentar (enxertar) uma sub-árvore em um ramo de

OPERAÇÃO DE REMOÇÃO - 3ª SITUAÇÃO Para poder retirar esse nó da árvore, devemos proceder da seguinte forma:encontramos o elemento que precede o elemento a ser retirado na ordenação. Isto equivale a encontrar o elemento mais à direita da sub-árvore à esquerda;

trocamos a informação do nó a ser retirado com a informação do nó encontrado;

retiramos novamente o nó encontrado (que agora contém a informação do nó que se deseja retirar).

Observa-se que retirar tal nó agora é trivial, pois esse é um nó folha ou um nó com um único filho. 54

Page 55: ÁRVORESif.ufrgs.br/~thielo/arvores1.pdf · 2019-03-25 · sub-árvores. Assim, a função “cria” pode ser utilizada para acrescentar (enxertar) uma sub-árvore em um ramo de

OPERAÇÃO DE REMOÇÃO – 3ª SITUAÇÃO

55

Page 56: ÁRVORESif.ufrgs.br/~thielo/arvores1.pdf · 2019-03-25 · sub-árvores. Assim, a função “cria” pode ser utilizada para acrescentar (enxertar) uma sub-árvore em um ramo de

OPERAÇÃO DE REMOÇÃO – 3ª SITUAÇÃO

56

Page 57: ÁRVORESif.ufrgs.br/~thielo/arvores1.pdf · 2019-03-25 · sub-árvores. Assim, a função “cria” pode ser utilizada para acrescentar (enxertar) uma sub-árvore em um ramo de

OPERAÇÃO DE REMOÇÃO – 3ª SITUAÇÃO

57