Sei sulla pagina 1di 58

Estruturas de Dados II

Prof. Esp. Flvio Almeida

rvores

Introduo Propriedades bsicas e terminologia Mtodos de rvores Algoritmos bsicos de rvores Profundidade e altura Caminhamento Pr-fixado Caminhamento Ps-fixado

rvores

rvores Binrias Introduo Propriedades de rvores Binrias Caminhamento sobre rvores Binrias Estruturas de dados para representar rvores Uma estrutura baseada em vetores para rvores binrias Uma estrutura encadeada para rvores binrias Uma estrutura encadeada para rvores genricas Representando rvores genricas usando rvores binrias

rvores Introduo

Especialistas em produtividade dizem que as solues so obtidas pensando-se de maneira no-linear. Discutiremos a partir de agora uma das mais importantes estruturas de dados no lineares da computao as rvores.

Estruturas tipo rvore so realmente um atalho na organizao de dados na medida que permitem implementar uma srie de algoritmos de forma mais rpida do que usando estruturas de dados lineares, tais como listas, vetores ou seqncias.

rvores Introduo

As rvores tambm oferecem uma organizao natural para os dados e, em conseqncia, tem se tornado uma estrutura de dados onipresente em sistemas de arquivos, interfaces grficas com o usurio, bancos de dados, pginas na Internet e outros sistemas computacionais. Quando se afirma que as rvores so no-lineares estamos nos referindo a relacionamentos organizacionais mais ricos que simples relaes de antes e depois entre objetos de uma seqncia. Dizemos que os relacionamentos de uma rvore so hierrquicos, com alguns objetos estando acima ou abaixo de outros.

rvores Introduo

As rvores esto em muitos lugares, alguns exemplos de usos destas estruturas so:

rvore genealgica rvore organizacional rvore de cdigo rvore de pesquisa binria rvore de deciso

rvores - Exemplo
rvore Genealgica

Ana

Henrique

Ronaldo

Roni

Lisa

Maria

rvores - Exemplo

rvore Organizacional
C.E.O.

Marketing Manager

Financial Manager

Project Manager

Ireland

Europe

....

Project A

R&D

Team Leader 1

Team Leader 2

rvores - Exemplo

rvore de Cdigo
0 a 0 0 c 1 d 1 1 b

d = 101

rvores - Exemplo
rvore de Pesquisa Binria
Domingo

Segunda

Tera

Sexta

Sbado Quinta

Quarta

Seqncia ordenada de elementos armazenados em uma rvore

rvores - Exemplo
rvore de Deciso
Alarme?

No
Sensores Operativos? No Ignora? No

Sim Noite? Sim

Alerta a Polcia.

rvores Propriedades Bsicas e Terminologia

Uma rvore T um conjunto de nodos (ns) que armazenam elementos em relacionamento pai-filho com as seguintes propriedades:

T tem um nodo especial, r, chamado de raiz de T. Cada nodo v de T diferente de r tem um nodo pai u.

Uma rvore no pode ser vazia, uma vez que deve ter pelo menos um nodo, a raiz.

rvores Propriedades Bsicas e Terminologia

Se um nodo u pai de um nodo v, ento dizemos que v filho de u. Dois nodos que so filhos do mesmo pai so irmos. Um nodo externo se no tem filhos e interno se tem um ou mais filhos. Os nodos externos tambm so conhecidos como folhas.

rvores Propriedades Bsicas e Terminologia

Uma subrvore de T enraizada no nodo v a rvore formada por todos os descendentes de v em T (incluindo o prprio v). O ancestral de um nodo tanto um ancestral direto como um ancestral do pai do nodo. De forma inversa, dizemos que um nodo v descendente de u se u um ancestral de v.

rvores Propriedades Bsicas e Terminologia

Nodo Raiz
Cada nodo v de T diferente de r tem um pai

rvores Propriedades Bsicas e Terminologia

Nodo externo (N Folha)

Um nodo externo se no tem filhos

rvores Propriedades Bsicas e Terminologia

Nodo externo (N Folha)

Um nodo externo se no tem filhos

Propriedades da Folha

rvores Propriedades Bsicas e Terminologia

Um nodo interno se ele possui um ou mais filhos

Nodo interno

rvores Propriedades Bsicas e Terminologia

Se o n u o pai do n v,
ento dizemos que v um filho de u

Nodo pai

Filho

rvores Propriedades Bsicas e Terminologia


Dois nodos que so filhos de um mesmo pai so ditos irmos

Pai

Irmos

rvores Propriedades Bsicas e Terminologia


A subrvore de T enraizada em um nodo v a rvore consistindo de todos os descendentes de v em T incluindo o prprio v

rvores Propriedades Bsicas e Terminologia

r Ancestrais {v, u, r}

u
Um ancestral de um n v ou um ancestral direto ou um ancestral de seu pai

rvores Propriedades Bsicas e Terminologia


Um nodo v um descendente de um nodo u se u um ancestral de v

u v Descendente

rvores - Exemplo

Na maioria dos sistemas operacionais, os arquivos so organizados hierarquicamente em diretrios aninhados (tambm chamados de pastas) que so apresentados ao usurio sob a forma de uma rvore. Mais especificamente, os nodos internos de uma rvore so associados a diretrios e os nodos externos so associados com arquivos normais. No sistema operacional UNIX, a raiz da rvore apropriadamente chamada de diretrio raiz, e representada pelo smbolo /. Este corresponde ao ancestral de todos os diretrios e arquivos em um sistema de arquivos UNIX.

rvores - Exemplo
/usurios/rt/cursos/

cs016/

cs252/

notas

temas/

programas/

projetos/

notas

trabalhos/ tm1 tm2 tm3 pr1 pr2 pr3 compre baixo venda alto mercado

demos/

rvores Propriedades Bsicas e Terminologia

Uma rvore ordenada se existe uma ordem linear definida para os filhos de cada nodo, ou seja, se podemos identificar os filhos de um nodo como sendo o primeiro, segundo, terceiro e assim por diante. Tal ordenao determinada pelo uso que se pretende dar para a rvore, e normalmente indicada no desenho de uma rvore organizando os irmos da esquerda para a direita, seguindo a relao entre os mesmos. rvores ordenadas normalmente indicam o relacionamento de ordem existente entre os irmos, listando-os em uma seqncia ou iterador na ordem correta.

rvores Propriedades Bsicas e Terminologia

Uma rvore binria uma rvore ordenada na qual todo nodo tem, no mximo, dois filhos.

Uma rvore binria prpria se cada um de seus nodos tiver 0 (zero) ou 2 (dois) filhos. Desta forma, em uma rvore binria prpria, todo nodo interno tem exatamente dois filhos.
Para cada nodo interno de uma rvore binria, nomeamos cada filho como filho da esquerda e filho da direita.

rvores Propriedades Bsicas e Terminologia

Esses filhos so organizados de forma que o filho da esquerda venha antes do filho da direita. As subrvores enraizadas no filho da esquerda ou no filho da direita de um nodo interno v so nomeadas, respectivamente, de subrvore esquerda e subrvore direita de v.

Vamos assumir durante este curso que toda rvore binria uma rvore binria prpria, a no ser que seja dito o contrrio.
As rvores binrias so teis para vrios tipos de aplicaes. Dois de seus usos mais comuns sero discutidos a seguir:

rvores Propriedades Bsicas e Terminologia

Uma classe importante de rvores binrias destaca-se em contextos em que queremos representar as diferentes sadas que podem resultar a partir das respostas a um conjunto de perguntas do tipo sim ou no. Cada nodo interno associado com uma questo. Comeando pela raiz, avanamos pelo filho da esquerda ou direita do nodo corrente conforme a resposta para a pergunta for sim ou no. Tais rvores so conhecidas como rvores de Deciso porque cada nodo externo de v em tais rvores representa uma deciso sobre o que fazer se a questo associada com os ancestrais de v for respondida de maneira a levar a v.

rvores Propriedades Bsicas e Terminologia


Voc nervoso? Sim Conta de poupana No

Voc vai necessitar da maior parte do dinheiro nos prximos 5 anos?


Sim No Voc est disposto a aceitar riscos maiores em troca da expectativa de retorno maior? Sim No Carteira de aes diversificada com Aes, bnus e fundos de curto prazo.

Fundo prefixado

Carteira de aes

rvores Propriedades Bsicas e Terminologia

Uma expresso aritmtica pode ser representada por uma rvore cujos nodos externos so associados com variveis constantes e cujos nodos internos so associados com um dos operadores +, -, x e /. Cada nodo em tal rvore tem consigo um valor associado.

Se um nodo externo, ento seu valor o da sua varivel ou constante. Se um nodo interno, ento o seu valor definido aplicando-se sua operao aos valores de seus filhos.

rvores Propriedades Bsicas e Terminologia


rvore de Expresso
/ x + 3 1 3 9 + 2 3 x + 6

Esta rvore representa a expresso ((((3+1)x3)/((9-5)+2))-((3x(7-4))+6)). O valor associado com o nodo interno rotulado com / 2.

rvores Propriedades Bsicas e Terminologia


rvore de Expresso
/ x + 3 1 3 9 + 2 3 x + 6

Qual resultado associado-se os nodos interno rotulado com raiz?

rvores - Mtodos

A estrutura de dados rvore armazena elementos em posies, como as de uma lista, que so definidas em relao s posies de seus vizinhos. As posies de uma rvore so os seus nodos, e o posicionamento pela vizinhana satisfaz as relaes pai-filho que definem uma rvore vlida. Como as posies de uma lista, um objeto posio para uma rvore suporta o mtodo:

element(): Retorna o objeto nesta posio. Entrada: nenhuma. Sada: objeto.

rvores - Mtodos

O poder real de um nodo posio em uma rvore, entretanto, vem dos mtodos de acesso do TAD rvore que retornam e aceitam posies, como os que seguem:

root(): Retorna a raiz da rvore. Entrada: nenhuma. Sada: posio. parent(v): Retorna o nodo pai de v; ocorre um erro se v for raiz. Entrada: posio. Sada: posio. children(v): Retorna um iterador sobre os filhos do nodo v. Entrada: posio. Sada: iterador de posies.

rvores - Mtodos

Se uma rvore T ordenada, ento o iterador children(v) permite o acesso aos filhos de v na ordem. Se v um nodo externo, ento children(v) um iterador vazio. Alm do mtodo de aceso fundamental acima, tambm inclumos os seguintes mtodos de consulta:

IsInternal(v): Testa se um nodo v interno. Entrada: posio. Sada: booleano. isExternal(v): Testa se um nodo v externo. Entrada: posio. Sada: booleano. isRoot(v): Testa se um nodo v a raiz. Entrada: posio. Sada: booleano.

rvores - Mtodos
A tabela a seguir mostra uma srie de operaes e seus efeitos sobre uma rvore T.
Abrao
0

Operao

Sada

T
(Abrao, Agar, Ismael, Sarah, Isaac, Jac, Jesus, Esa, nil)
(Abrao, Agar, Ismael, Sarah, Isaac, Jac, Jesus, Esa, nil) (Abrao, Agar, Ismael, Sarah, Isaac, Jac, Jesus, Esa, nil) (Abrao, Agar, Ismael, Sarah, Isaac, Jac, Jesus, Esa, nil) (Abrao, Agar, Ismael, Sarah, Isaac, Jac, Jesus, Esa, nil) (Abrao, Agar, Ismael, Sarah, Isaac, Jac, Jesus, Esa, nil) (Abrao, Agar, Ismael, Sarah, Isaac, Jac, Jesus, Esa, nil) (Abrao, Agar, Ismael, Sarah, Isaac, Jac, Jesus, Esa, nil) (Abrao, Agar, Ismael, Sarah, Isaac, Jac, Jesus, Esa, nil) (Abrao, Agar, Ismael, Sarah, Isaac, Jac, Jesus, Esa, nil)

Element(5)
Parent(3) Root() Children(5) IsInternal(8) IsRoot(9)

Jac
Agar Abao Jesus False False Sarah True Error Jac

Agar
2

Sarah
4 8

Parent(1) IsExternal(1) Children(10)

Isaac
5 7

nil

Ismael

Jac
6

Esa

Parent(7)

Jesus

rvores - Mtodos
A tabela a seguir mostra uma srie de operaes e seus efeitos sobre uma rvore T.
Abrao
0

Operao

Sada

T
(Abrao, Agar, Ismael, Sarah, (Abrao, Agar, Ismael, Sarah, Isaac, Jac, Jesus, Esa, nil) Isaac, Jac, Jesus, Esa, nil)
(Abrao, Agar, Ismael, Sarah, (Abrao, Agar, Ismael, Sarah, Isaac, Jac, Jesus, Esa, nil) Isaac, Jac, Jesus, Esa, nil) (Abrao, Agar, Ismael, (Abrao, Agar, Ismael, Sarah, Isaac, Jac, Jesus, Esa, Isaac, Jac, Jesus, Esa, nil) (Abrao, Agar, Ismael, (Abrao, Agar, Ismael, Sarah, Isaac, Jac, Jesus, Esa, nil) Isaac, Jac, Jesus, Esa, nil) (Abrao, Agar, Ismael, Sarah, (Abrao, Agar, Ismael, Sarah, Isaac, Jac, Jesus, Esa, nil) Isaac, Jac, Jesus, Esa, nil) (Abrao, Agar, Ismael, Sarah, (Abrao, Agar, Ismael, Sarah, Isaac, Jac, Jesus, Isaac, Jac, Jesus, Esa, nil) nil) (Abrao, Agar, Ismael, Sarah, (Abrao, Agar, Ismael, Sarah, Isaac, Jac, Jesus, Isaac, Jac, Jesus, Esa, nil) nil) (Abrao, Agar, Ismael, Sarah, (Abrao, Agar, Ismael, Sarah, Isaac, Jac, Jesus, Esa, nil) Isaac, Jac, Jesus, Esa, nil) (Abrao, Agar, Ismael, Sarah, (Abrao, Agar, Ismael, Sarah, Isaac, Jac, Jesus, Esa, nil) Isaac, Jac, Jesus, Esa, nil) (Abrao, Agar, Ismael, Sarah, (Abrao, Agar, Ismael, Sarah, Isaac, Jac, Jesus, Esa, nil) Isaac, Jac, Jesus, Esa, nil)

Element(5)
Parent(3) Root() Children(5) IsInternal(8) IsRoot(9)

Jac Jac
Agar Abrao Abao Abrao Jesus Jesus False False False Error Sarah Abrao True False Error Error Jac Esa

Agar
2

Sarah
4 8

Parent(1) IsExternal(1) Children(10)

Isaac
5 7

nil

Ismael

Jac
6

Esa

Parent(7)

Jesus

Algoritmos bsicos de rvores Profundidade e Altura

Seja v um nodo de uma rvore T. A profundidade de v o nmero de ancestrais de v, excluindo o prprio v. Observe que esta definio implica que a profundidade da raiz de T 0. A profundidade de um nodo v tambm pode ser definida recursivamente como segue:

Se v for a raiz, ento a profundidade de v 0. Em qualquer outro caso, a profundidade de v um mais a profundidade do pai de v.

Algoritmos bsicos de rvores Profundidade e Altura

O algoritmo recursivo depth, calcula a profundidade do nodo v de T chamando a si mesmo, recursivamente, sobre o pai de v e adicionando 1 ao valor retornado.

Desta forma, cada ancestral de v visitado por uma chamada recursiva e contribui com o valor de 1 para a profundidade.

Algoritmos bsicos de rvores Profundidade e Altura

Algoritmo depth(T,v): se T.isRoot(v) ento retorne 0 seno retorne 1+depth(T,T.parent(v))

Algoritmos bsicos de rvores Profundidade e Altura

Nmero de ancestrais do pai de v: 0

Encontre a profundidade do nodo v

Algoritmos bsicos de rvores Profundidade e Altura

Nmero de ancestrais do pai de v: 1

Encontre a profundidade do nodo v

Algoritmos bsicos de rvores Profundidade e Altura

Nmero de ancestrais do pai de v: 2

Encontre a profundidade do nodo v

Algoritmos bsicos de rvores Profundidade e Altura

Nmero de ancestrais do pai de v: 3

Encontre a profundidade do nodo v

Algoritmos bsicos de rvores Profundidade e Altura

A altura de um nodo v em uma rvore T tambm definida recursivamente:


Se v um nodo externo, ento a altura de v 0. Caso contrrio, a altura de v 1 somado com a maior altura de um filho de v.

A altura de uma rvore T a altura da raiz de T. Os algoritmos para o clculo da altura de uma rvore T e de um vrtice v sero mostrados a seguir:

Algoritmos bsicos de rvores Profundidade e Altura

Algoritmo height(T): h=0 para cada v T.positions() faa se T.isExternal(v) ento h=max(h,heigth(T,v)) retorne h

Algoritmos bsicos de rvores Profundidade e Altura

Algoritmo height(T,v):
se T.isExternal(v) ento retorna 0 seno h=0 para cada w T.children(v) faa h=max(h, height(T,w)) retorna 1+h

Algoritmos bsicos de rvores Profundidade e Altura

Rotule todos os nodos externos com a altura de 0

Algoritmos bsicos de rvores Profundidade e Altura

Rotule todos os nodos externos com a altura de 0

Algoritmos bsicos de rvores Profundidade e Altura

Rotule todos os nodos externos com a altura de 0

Algoritmos bsicos de rvores Profundidade e Altura

Rotule todos os nodos externos com a altura de 0

Algoritmos bsicos de rvores Profundidade e Altura

Altura de v 1 + max(altura dos filhos de v)

1 + max(0, 0) = 1

Algoritmos bsicos de rvores Profundidade e Altura

v 0

Altura de v 1 + max(altura dos filhos de v)

1 + max(1, 0) = 2

Algoritmos bsicos de rvores Profundidade e Altura


Altura de v 1 + max(altura dos filhos de v)

v
0

2 0

1 + max(2, 0) = 3

Algoritmos bsicos de rvores Profundidade e Altura

3
0

2 0

Algoritmos bsicos de rvores Profundidade e Altura

3
0

2 0

Algoritmos bsicos de rvores Profundidade e Altura


Abrao Ishabak Sarah

Agar

Quetura
nil Midi

Ismael
Maom Jac

Isaac Esa

kishna

Buda

Zoroastro Jud Ruben

Jesus

Determine a Profundidade e a Altura da rvore T.

Potrebbero piacerti anche