o que é uma árvore - ifrndocente.ifrn.edu.br/.../06arvores_rlh.pdfo que é uma árvore...

20
O que é uma árvore Em Computação, é um modelo abstrato de uma estrutura hierárquica Uma árvore consiste de nós com uma relação pai-filho Aplicações: Estrutura organizacional Sistemas de arquivos Ambiente de programação Computadores”Zen” Vendas P&D Construção Laptops Desktops Brasil Internacional Europa Asia Canada

Upload: others

Post on 05-Dec-2020

11 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: O que é uma árvore - IFRNdocente.ifrn.edu.br/.../06Arvores_rlh.pdfO que é uma árvore EmComputação, é um modeloabstrato de umaestrutura hierárquica Uma árvoreconsiste de nóscom

O que é uma árvoreEm Computação, é um modelo abstratode uma estruturahierárquicaUma árvore consistede nós com umarelação pai-filhoAplicações:� Estruturaorganizacional

� Sistemas de arquivos� Ambiente de programação

Computadores”Zen”

Vendas P&DConstrução

Laptops DesktopsBrasil Internacional

Europa Asia Canada

Page 2: O que é uma árvore - IFRNdocente.ifrn.edu.br/.../06Arvores_rlh.pdfO que é uma árvore EmComputação, é um modeloabstrato de umaestrutura hierárquica Uma árvoreconsiste de nóscom

sub-árvore

Terminologia de árvoreRaiz (root): Nó sem pai (A)Nó interno: Nó com, pelo menos, um filho (A, B, C, F)Nó externo: Nó sem filhos (E, I, J, K, G, H, D)Ancestral de um nó: pai, avô, bisavô, etc.Profundidade de um nó: Número de ancestraisAltura de um árvore: Profundidade máxima (3)Descendente de um nó: filho, neto, bisneto, etc.

A

B DC

G HE F

I J K

Sub-árvore: árvore formada por um nó e seus descendentes

Page 3: O que é uma árvore - IFRNdocente.ifrn.edu.br/.../06Arvores_rlh.pdfO que é uma árvore EmComputação, é um modeloabstrato de umaestrutura hierárquica Uma árvoreconsiste de nóscom

TAD árvoreMétodos genéricos:� integer size()� integer height()� boolean isEmpty()� Iterator elements()� Iterator nos()Métodos de acesso:� No root()� No parent(No)� Iterator children(No)

Métodos de consulta:� boolean isInternal(No)� boolean isExternal(No)� boolean isRoot(No)� integer depth(No)

Métodos de atualização:� Object replace(No, o)

Métodos adicionais podem ser definidos pela estrutura que extende/implementa o TAD árvore

Page 4: O que é uma árvore - IFRNdocente.ifrn.edu.br/.../06Arvores_rlh.pdfO que é uma árvore EmComputação, é um modeloabstrato de umaestrutura hierárquica Uma árvoreconsiste de nóscom

Profundidade

A profundidade de um nó v pode ser definida recursivamente como:� Se v for raiz, então a profundidade é 0� Senão, a profundidade é 1 mais a profundidade do pai de v

Algoritmo depth(v)

se (isRoot(v))

retorne 0

senão

retorne 1+depth(parent(v))

Page 5: O que é uma árvore - IFRNdocente.ifrn.edu.br/.../06Arvores_rlh.pdfO que é uma árvore EmComputação, é um modeloabstrato de umaestrutura hierárquica Uma árvoreconsiste de nóscom

Altura

A altura de um nó v pode ser definida recursivamente como:� Se v for externo, então a altura é 0� Senão, a altura é 1 mais a maior altura de um filho de v

Algoritmo altura(v)

se (isExternal(v))

retorne 0

senão

h=0

para cada w em children(v)

h=max(h,altura(w))

retorne 1+h

Algoritmo altura2(v)

h=0

para cada w em nos()

se (isExternal(w))

h=max(h,depth(w))

retorne h

Page 6: O que é uma árvore - IFRNdocente.ifrn.edu.br/.../06Arvores_rlh.pdfO que é uma árvore EmComputação, é um modeloabstrato de umaestrutura hierárquica Uma árvoreconsiste de nóscom

Travessia pré ordemUma travessia visita os nós de uma árvore de uma forma sistemáticaEm uma travessia pré-ordem, um nó é visitado antes de seus descendentesAplicação: imprimir um documento estruturado

Ganhar dinheiro rápido

1. Motivações Referências2. Métodos

2.1 Fraudar estoque

2.2 Esquema Ponzi1.1 Semente 1.2 Atividade 2.3 Roubar

banco

1

2

3

5

4 6 7 8

9

Algoritmo preOrder(v)

visite(v)

para cada filho w de v

preorder (w)

Page 7: O que é uma árvore - IFRNdocente.ifrn.edu.br/.../06Arvores_rlh.pdfO que é uma árvore EmComputação, é um modeloabstrato de umaestrutura hierárquica Uma árvoreconsiste de nóscom

Travessia pós ordemEm uma travessia pós-ordem, um nó é visitado depois de seus descendentesAplicação: Computar o espaço usado por diretórios, subdiretórios e arquivos

Algoritmo postOrder(v)

para cada filho w of v

postOrder (w)

visite(v)

g.71.014/

exercicios/ aFazer.txt1Kprogramas/

Alcance.java10K

Estoques.java25K

Exercicio1.pdf3K

Exercicio2.pdf2K

Bolha1.java20K

9

3

1

7

2 4 5 6

8

Page 8: O que é uma árvore - IFRNdocente.ifrn.edu.br/.../06Arvores_rlh.pdfO que é uma árvore EmComputação, é um modeloabstrato de umaestrutura hierárquica Uma árvoreconsiste de nóscom

Árvore bináriaUma árvore binária é uma árvore com as seguintes propriedades:� Cada nó interno tem, no máximo,

dois filhos� Arvore binária própria é aquela em que cada nó tem exatemente zero ou dois filhos

� Os filhos de um nó é um par ordenado

Chamamos os filhos de um nó de filho da esquerda e filho da direitaPodemos, também, definir uma árvore binária recursivamente como:� uma árvore consistindo de um

único nó, ou� Uma árvore cuja raiz tem um par

ordenado de filho, cada um dos quais é uma árvore binária

Aplicações:� Expressões aritméticas� Processo de decisão� busca

A

B C

F GD E

H I

Page 9: O que é uma árvore - IFRNdocente.ifrn.edu.br/.../06Arvores_rlh.pdfO que é uma árvore EmComputação, é um modeloabstrato de umaestrutura hierárquica Uma árvoreconsiste de nóscom

Árvore de expressões aritméticasÁrvore binária associada com uma expressão aritmética� Nós internos: operadores� Nós externos: operandosExemplo: árvore da expressão aritméticapara a expressão (2 × (a − 1) + (3 × b))

+

××

−2

a 1

3 b

Page 10: O que é uma árvore - IFRNdocente.ifrn.edu.br/.../06Arvores_rlh.pdfO que é uma árvore EmComputação, é um modeloabstrato de umaestrutura hierárquica Uma árvoreconsiste de nóscom

Árvore de decisãoÁrvore binária associada com um processo de decisão� Nós internos: questões com respostas sim/não� Nós externos: decisões

Exemplo: Onde jantar

Refeição rápida?

Que tal um café? Pode ser caro?

Cantina Shopping Abade Tábua de carne

Sim Não

Sim Não Sim Não

Page 11: O que é uma árvore - IFRNdocente.ifrn.edu.br/.../06Arvores_rlh.pdfO que é uma árvore EmComputação, é um modeloabstrato de umaestrutura hierárquica Uma árvoreconsiste de nóscom

Propriedades de AB (BT)Notaçãon número de nóse número de nós externos

i número de nós internos

h altura (height)

Propriedades:� e ==== i ++++ 1

� n ==== 2e −−−− 1

� h ≤≤≤≤ i

� h ≤≤≤≤ (n −−−− 1)////2

� e ≤≤≤≤ 2h

� h ≥≥≥≥ log2 e

� h ≥≥≥≥ log2 (n ++++ 1) −−−− 1

Page 12: O que é uma árvore - IFRNdocente.ifrn.edu.br/.../06Arvores_rlh.pdfO que é uma árvore EmComputação, é um modeloabstrato de umaestrutura hierárquica Uma árvoreconsiste de nóscom

Propriedades de AB (BT)

Nível Nós0

1

2

3

1

2

4

8

Número máximo de nós em um nível h é 2h

Número total de nós é, no máximo é 2h+1 -1

Page 13: O que é uma árvore - IFRNdocente.ifrn.edu.br/.../06Arvores_rlh.pdfO que é uma árvore EmComputação, é um modeloabstrato de umaestrutura hierárquica Uma árvoreconsiste de nóscom

TAD Árvore Binaria

O TAD ArvoreBinaria possui os métodos de árvore.Métodos adicionais:� Position leftChild(p)� Position rightChild(p)� boolean hasLeft(p)� boolean hasRight(p)

Métodos de atualização podem ser definidos por estruturas de dados que implementam o TAD ArvoreBinaria

Page 14: O que é uma árvore - IFRNdocente.ifrn.edu.br/.../06Arvores_rlh.pdfO que é uma árvore EmComputação, é um modeloabstrato de umaestrutura hierárquica Uma árvoreconsiste de nóscom

Travessia em ordemNa travessia inorder, um nó é visitado depois do filho da esquerda e antes do filho da direitaAplicação: Desenhar uma árvore binária� x(v) = colocação de v� y(v) = profundidade de v

Algoritmo inOrder(v)

se (isInternal (v))

inOrder (leftChild (v))

visite(v)

se ( isInternal (v))

inOrder (rightChild (v))

3

1

2

5

6

7 9

8

4

Page 15: O que é uma árvore - IFRNdocente.ifrn.edu.br/.../06Arvores_rlh.pdfO que é uma árvore EmComputação, é um modeloabstrato de umaestrutura hierárquica Uma árvoreconsiste de nóscom

Impressão de expressões aritm.Especialização de uma travessia inorder� Imprime operando/operador

quando visita o nó� imprime “(“ antes de visitar o

filho da esquerda� imprime “)“ depois de visitar o

filho da direita

Algoritmo printExpression(v)

se (isInternal (v))print(“(’’)inOrder (leftChild (v))

print(v.element ())

se (isInternal (v) )inOrder (rightChild (v))

print (“)’’)

+

××

−2

a 1

3 b((2 × (a − 1)) + (3 × b))

Page 16: O que é uma árvore - IFRNdocente.ifrn.edu.br/.../06Arvores_rlh.pdfO que é uma árvore EmComputação, é um modeloabstrato de umaestrutura hierárquica Uma árvoreconsiste de nóscom

Avaliação de expressões aritm.Especialização da travessia pós-ordem� Método recursivo retorna o valor de uma subárvore

� Ao visitar um nó interno, combina os valores das subárvores

Algoritmo evalExpr(v)

se (isExternal (v) )return v.element ()

senão

x ← evalExpr(leftChild (v))

y ← evalExpr(rightChild (v))

◊◊◊◊ ← operador em v

return x ◊◊◊◊ y+

××

−2

5 1

3 2

Page 17: O que é uma árvore - IFRNdocente.ifrn.edu.br/.../06Arvores_rlh.pdfO que é uma árvore EmComputação, é um modeloabstrato de umaestrutura hierárquica Uma árvoreconsiste de nóscom

Travessia de Euler (Euler tour)Travessia genérica de árvores bináriasCaminha pela árvore e visita cada nó 3 vezes:� pela esquerda (pré ordem)� Por baixo (em ordem)� pela direita (pós ordem)

+

×

−2

5 1

3 2

EB

Page 18: O que é uma árvore - IFRNdocente.ifrn.edu.br/.../06Arvores_rlh.pdfO que é uma árvore EmComputação, é um modeloabstrato de umaestrutura hierárquica Uma árvoreconsiste de nóscom

Estrutura de dados para árvoresUm nó é um objeto que armazena� Elemento� Nó pai� Nós Filhos (Sequência,

Vector, Array, etc)Objetos nós

B

DA

C E

F

B

∅ ∅

A D F

C

E

Page 19: O que é uma árvore - IFRNdocente.ifrn.edu.br/.../06Arvores_rlh.pdfO que é uma árvore EmComputação, é um modeloabstrato de umaestrutura hierárquica Uma árvoreconsiste de nóscom

Estrutura de dados para ABUm nó é um objeto que armazena� Elemento� Nó pai� Filho da esquerda� Filho da direitaObjetos nós

B

DA

C E

∅∅∅∅ ∅∅∅∅

∅∅∅∅ ∅∅∅∅ ∅∅∅∅ ∅∅∅∅

B

A D

C E

∅∅∅∅

Page 20: O que é uma árvore - IFRNdocente.ifrn.edu.br/.../06Arvores_rlh.pdfO que é uma árvore EmComputação, é um modeloabstrato de umaestrutura hierárquica Uma árvoreconsiste de nóscom

Estrutura de dados para AB

Podemos usar um array

a

b c

d e f g

h i j k l m n o

1

23

4 5 6 7

8 9 10 11 12 13 14 15

a b c d e f g h i j k l m n o

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15