Documente Academic
Documente Profesional
Documente Cultură
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
rvores - Exemplo
rvore de Deciso
Alarme?
No
Sensores Operativos? No Ignora? No
Alerta a Polcia.
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.
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.
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.
Nodo Raiz
Cada nodo v de T diferente de r tem um pai
Propriedades da Folha
Nodo interno
Se o n u o pai do n v,
ento dizemos que v um filho de u
Nodo pai
Filho
Pai
Irmos
r Ancestrais {v, u, r}
u
Um ancestral de um n v ou um ancestral direto ou um ancestral de seu pai
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/
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.
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.
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:
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.
Fundo prefixado
Carteira de aes
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.
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 - 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:
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
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
Isaac
5 7
nil
Ismael
Jac
6
Esa
Parent(7)
Jesus
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.
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.
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:
Algoritmo height(T): h=0 para cada v T.positions() faa se T.isExternal(v) ento h=max(h,heigth(T,v)) retorne h
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
1 + max(0, 0) = 1
v 0
1 + max(1, 0) = 2
v
0
2 0
1 + max(2, 0) = 3
3
0
2 0
3
0
2 0
Agar
Quetura
nil Midi
Ismael
Maom Jac
Isaac Esa
kishna
Buda
Jesus