Вы находитесь на странице: 1из 12

RVORES

1 Definio
Uma rvore T (do ingls tree) um conjunto finito de N estruturas elementares, chamados nodos, tal que se N > 0, ento: 1. Existe um nodo especial, chamado raiz da rvore; 2. Os restantes N-1 nodos esto particionados em M conjuntos disjuntos: S1, S2, ......, SM, onde cada um destes conjuntos tambm uma rvore. As rvores S1, S2, ......, SM so chamadas sub-rvores de T. rvores so estruturas de dados extremamente teis em muitas aplicaes. Assim como as listas lineares, rvores so estruturas de dados que caracterizam uma relao entre os dados que a compem. No caso de rvores, a relao existente entre os nodos uma relao de hierarquia, onde um conjunto de nodos hierarquicamente subordinado a outro.

2 Formas de Representao Grfica


2.1 Grafo (representao mais utilizada)

2.2 Diagrama de Venn (ou digrama de incluso ou conjuntos aninhados)

2.3 Identao A B

D E F G

2.4 Parnteses Aninhados (A (B(D, E, F), C(G)))

UFGD / FACET Prof. Wellington Lima dos Santos Algoritmos e Estruturas de Dados II

3 Terminologia
A raiz de uma rvore chamada de pai de suas sub-rvores. Nodos com o mesmo pai so denominados irmos. O grau de um nodo por definio o nmero de sub-rvores do nodo. O grau da rvore grau mximo entre todos os nodos. Um nodo folha ou terminal tem grau zero, ou seja, no tem sub-rvores. O nodo raiz tem nvel um, os nodos filhos da raiz tm nvel 2 e, assim, sucessivamente. A altura ou profundidade de uma rvore igual ao nmero de nveis desta rvore. Um nodo folha tem altura unitria. Um conjunto de rvores disjuntas forma uma floresta. Assim, se o nodo raiz de uma rvore for eliminado, suas sub-rvores formaro uma floresta. Inversamente, se razes das rvores que formam uma floresta forem unidas atravs um nodo adicional, uma rvore ser formada.

4 rvores Binrias
rvores Binrias so estruturas do tipo rvore, onde cada nodo pode ter no mximo duas sub-rvores, ou seja, o grau de cada nodo pode ser 0, 1 ou 2. Convencionou-se denominar as subrvores de um nodo em sub-rvore esquerda (E) e sub-rvore direita (D). As rvores binrias combinam as vantagens de duas outras estruturas de dados: vetor ordenado e lista encadeada. Assim, permitem pesquisas binrias (como os vetores ordenados) e as mesmas facilidades de insero e de remoo de itens que as listas encadeadas proporcionam.

4.1 rvore Estritamente Binria Uma rvore estritamente binria aquela em que cada n tem 0 ou 2 sub-rvores, ou seja, nenhum nodo tem filho nico.

4.2 rvore Binria Cheia Uma rvore binria cheia aquela cujos nodos, exceto os do ltimo nvel, tem exatamente duas sub-rvores. O nmero de nodos de uma rvore binria cheia 2h-1, em que h a sua altura.

4.3 rvore Binria Completa Uma rvore completa uma rvore estritamente binria (grau 0 ou 2), na qual seus nodos folhas podem estar apenas no ltimo e no penltimo nveis. Das definies anteriores, tem-se que toda rvore cheia tambm completa e estritamente binria.

UFGD / FACET Prof. Wellington Lima dos Santos Algoritmos e Estruturas de Dados II

4.4 rvore Binria de Pesquisa (ou rvore Binria Ordenada) aquela em que todo nodo tem chave maior que a chave dos seus descendentes esquerda e menor que a chave dos seus descendentes direita. Conseqentemente, uma rvore binria de pesquisa s admite uma ocorrncia de cada chave.
4 C

2 1 3 5 6

8 9 7 A

B D

E G F

4.5 rvore Binria Balanceada (ou rvore AVL) Uma rvore binria considerada balanceada quando, para cada n, as alturas de suas subrvores esquerda e direita diferem de no mximo uma unidade. Essa diferena chamada fator de balanceamento do nodo. Cada nodo de uma rvore balanceada pode ter fator de balanceamento entre -1 e 1. Idealmente, uma rvore binria perfeitamente balanceada quando todos os seus nodos tm fatores de balanceamento nulos, como acontece nas rvores binrias cheias. A denominao AVL uma homenagem aos dois matemticos russos Adelson-Velskii e Landis, que em 1962 sugeriram este conceito e propuseram algoritmos para manter o balanceamento de uma rvore binria. A altura de uma rvore AVL no mximo 45% maior que a altura de uma rvore binria perfeitamente balanceada, considerando o mesmo nmero de nodos.

4.6 Percurso (ou travessia) em rvores Binrias Percorrer uma rvore binria visitando cada nodo uma nica vez gera uma seqncia linear de nodos, cuja ordem depende de como a rvore foi percorrida. As trs formas ou ordens de percurso mais importantes so: pr-ordem, in-ordem e ps-ordem. O que define o prefixo do nome do percurso ordem em que a raiz visitada, sendo que a sub-rvore esquerda sempre visitada antes da sub-rvore direita. Um quarto percurso importante, porm menos usual o percurso em nvel.

UFGD / FACET Prof. Wellington Lima dos Santos Algoritmos e Estruturas de Dados II

4.6.1 Percurso em Pr-Ordem (R, E, D) Nesta ordem de percurso, visita-se: a raiz; a sub-rvore esquerda, em pr-ordem; e a sub-rvore direita, em pr-ordem.

4.6.2 Percurso In-Ordem (E, R, D) Nesta ordem de percurso, visita-se: a sub-rvore esquerda, in-ordem; a raiz; e sub-rvore direita, em in-ordem.

4.6.3 Percurso em Ps-Ordem (E, D, R) Nesta ordem de percurso, visita-se: a sub-rvore esquerda, em ps-ordem; a sub-rvore direita, em ps-ordem; e a raiz.

4.6.4 Percurso em Nvel No percurso em nvel, a rvore percorrida no sentido de cima para baixo e da esquerda para direita, ou seja, no sentido da escrita ocidental. o percurso mais fcil de ser compreendido, porm o mais difcil de ser programado, porque necessrio utilizar uma fila em um algoritmo iterativo. 4.6.5 Exemplos dos Percursos rvore Percurso pr-ordem in-ordem Sequncia de Nodos 4 2 1 3 6 5 7 1 2 3 4 5 6 7 1 3 2 5 7 6 4 4 2 6 1 3 5 7 + / - A B C * D ^ E F (A - B) / C + D * E ^ F A B - C / D E F ^* +
(matematicamente inconsistente!)

4 2 1 3
+ / A B C D E * ^ F

6 5 7

ps-ordem em nvel pr-ordem in-ordem ps-ordem em nvel

+ / * - C D ^ A B E F

UFGD / FACET Prof. Wellington Lima dos Santos Algoritmos e Estruturas de Dados II

Observao: Note que, em se tratando de rvores binrias representando expresses matemticas, foi necessrio acrescentar parnteses na expresso com notao in-fixa (que a usual e corresponde ao percurso in-ordem). J as notaes pr-fixa e ps-fixa no necessitam de parnteses, qualquer que seja a complexidade da expresso. A notao ps-fixa, tambm chamada de notao polonesa reversa ou RPN, utilizada em muitas calculadoras cientficas como aquelas da Hewlett Packard. 4.7 Estrutura de Dados e Algoritmos Bsicos para rvores Binrias A estrutura de dados para uma rvore binria uma estrutura dinmica, assim como as listas encadeadas, onde cada nodo representado por um registro contendo: 1) um campo chave do tipo inteiro, string, etc. 2) um ponteiro para as sub-rvores esquerda e direita; e 3) outros campos de dados, de acordo com o problema de aplicao. ArvBin = ^TNodo TNodo = ponteiro para registro Chave : inteiro {caracter, string, etc.} E : ArvBin {Ponteiro para a sub-rvore esquerda} D : ArvBin {Ponteiro para a sub-rvore direita} {outros campos} fim 4.7.1 Percursos (ou travessia) em rvores Binrias Nos algoritmos abaixo, o procedimento Processa executa qualquer ao sobre o nodo, como por exemplo: imprimir o valor da sua chave, recuperar o contedo de um dado campo, etc. Algoritmo para percurso em pr-ordem procedimento Pre_ordem(T : ArvBin) inicio se T nulo ento inicio Processa(T) {imprime o valor da chave, por exemplo} Pre_ordem(T^.E) Pre_ordem(T^.D) fim fim Algoritmo para percurso in-ordem procedimento In_ordem(T : ArvBin) inicio se T nulo ento inicio In_ordem(T^.E) Processa(T) In_ordem(T^.D) fim fim

UFGD / FACET Prof. Wellington Lima dos Santos Algoritmos e Estruturas de Dados II

Algoritmo para percurso em ps-ordem procedimento Pos_ordem(T : ArvBin) inicio se T nulo ento inicio Pos_ordem(T^.E) Pos_ordem(T^.D) Processa(T) fim fim

Algoritmo para percurso em nvel procedimento EmNvel(T: ArvBin) declare F : Fila incio se T nulo ento incio InicializaFila(F) InsereNaFila(F, T) enquanto FilaNoVazia(F) faa incio T RetiraDaFila(F) Processa(T) se T^.E nulo ento InsereNaFila(F, T^.E) se T^.D nulo ento InsereNaFila(F, T^.D) fim FinalizaFila(F) fim fim

{cria uma fila fazia} {insere a raiz na fila} {enquanto houver um nodo na fila} {T o primeiro da fila} {insere T^.E no final da fila} {insere T^.D no final da fila} {destroi a fila}

4.7.1 Algoritmo para Gerar uma rvore Binria de Altura Mnima Para gerar uma rvore binria de altura h mnima, a partir de N entradas, basta criar o maior nmero possvel de nodos em cada nvel, exceto no ltimo, caso N < 2h-1 (rvore incompleta). Isto pode ser conseguido distribuindo-se eqitativamente os registros entre as sub-brvores esquerda e direita de cada nodo criado. funo ArvBin_AltMin(N: integer): variveis Ne, Nd : inteiro Nodo : ArbVin incio se N = 0 ento retorne nulo seno incio Ne N div 2 Nd N - Ne 1 Nodo CriaNodo Nodo.Chave LeiaChave Nodo^.E ArvBin_AltMin(Ne) Nodo^.D ArvBin_AltMin(Nd) retorne Nodo fim fim ArvBin

{metade para a sub-rvore esquerda} {aloca memria para um novo nodo} {l a prxima chave}

UFGD / FACET Prof. Wellington Lima dos Santos Algoritmos e Estruturas de Dados II

4.7.2 Destruio (liberao dos recursos alocados) de uma rvore Binria procedimento DestroiArvBin(PorRef T: ArvBin) incio se T nil ento incio DestroiArvBin(T^.L) DestroiArvBin(T^.R) Dispose(T) T nil fim fim 4.7.3 Altura de uma rvore Binria funo AltArvBin(T: ArvBin): inteiro declare hL, hR: inteiro incio se T nulo ento incio hL AltArvBin(T^.L) hR AltArvBin(T^.R) se hL > hR ento result 1 + hL seno result 1 + hR fim seno result 0 fim 4.8 Operaes Bsicas em rvores Binrias de Pesquisa 4.8.1 Insero A insero de um registro com chave K em uma rvore binria de pesquisa uma operao simples, cujo maior trabalho consiste em determinar a posio em que o novo nodo ocupar na rvore, cuja raiz apontada pelo ponteiro T. Se T for nulo, ento a rvore est vazia e o novo nodo se tornar a raiz da rvore, ou seja, o ponteiro T passar apontar para esse nodo. Se T no for nulo ento trs situaes podem ocorrer: 1 A chave K menor que a chave da raiz T, logo o novo nodo s poder ser inserido na sub-rvore esquerda de T. Compara-se novamente K com a raiz da sub-rvore esquerda e as mesmas trs situaes podem ocorrer. 2. A chave K igual chave da raiz T e, consequentemente, um novo nodo no poder ser inserido, j que uma rvore binria de pesquisa s admite uma ocorrncia de cada chave. 3. A chave K maior do que a chave da raiz T, ento o novo nodo ter que ser inserido na subrvore direita de T. Neste caso, K comparada com a raiz da sub-rvore direita, sendo possveis as trs situaes descritas. A no ser que ocorra a situao 2 (chave j existente), o processo repetido recursivamente at que se encontre uma sub-rvore vazia (ponteiro nulo). O novo nodo ser a raiz desta sub-rvore vazia, ou seja, os nodos sempre so inseridos como nodos folhas. Eis o algoritmo:

UFGD / FACET Prof. Wellington Lima dos Santos Algoritmos e Estruturas de Dados II

funo Ins_ArvBinPesq(PorRef T : ArvBin; K : Inteiro) : lgico incio se T nulo ento incio se K < T^.Chave ento retorne Ins_ArvBinPesq(T^.E, K) seno se K = T^.Chave ento retorne falso seno retorne Ins_ArvBinPesq(T^.D, K) fim seno incio T CriaNodo {aloca memria para um novo nodo} T^.Chave K retorne verdadeiro fim fim 4.8.2 Pesquisa Pesquisar uma chave K em uma rvore binria de pesquisa apontada por T uma operao ainda mais simples, se comparada operao de insero. Existem quatro casos possveis: 1. T nulo e a pesquisa encerrada sem sucesso, pois no h como continuar a pesquisa em uma rvore vazia. 2. A chave K coincide com a chave de T, ento a pesquisa concluda com sucesso. 3. A chave K menor que a chave de T, portanto a pesquisa deve prosseguir na sub-rvore esquerda de T. 4. A chave K maior que a chave de T, logo a chave deve ser pesquisada na sub-rvore direita de T. No algoritmo abaixo, a funo retorna um ponteiro para nodo que contm a chave pesquisada K, caso seja encontrada; caso contrrio, a funo retorna um ponteiro nulo. funo Pesq_ArvBinPesq(T : ArvBin; K : inteiro) : ArvBin incio se T nulo ento incio se K = T^.Chave ento {pesquisa com sucesso} retorne T seno se K < T^.Chave ento {pesquisa na sub-rv esquerda} retorne Pesq_ArvBinPesq(T^.E, K) seno {pesquisa na sub-rv. direita} retorne Pesq_ArvBinPesq(T^.D, K) fim seno {pesquisa sem sucesso} retorne nulo fim

UFGD / FACET Prof. Wellington Lima dos Santos Algoritmos e Estruturas de Dados II

Como a cada comparao desce-se um nvel na estrutura da rvore, o nmero mximo de comparaes igual altura (nmero de nveis) da rvore. Assim, interessante que a rvore binria de pesquisa tenha altura mnima: 1 + Piso(Log2 N), em que Piso retorna o maior inteiro menor ou igual ao seu argumento. Portanto, a eficincia da pesquisa em uma rvore binria de pesquisa balanceada tem ordem de complexidade O(Log N). 4.8.3 Excluso A excluso de um registro de chave K em uma rvore binria de pesquisa uma operao um pouco mais trabalhosa que as operaes de insero e de pesquisa. Esta operao aparentemente complexa torna-se mais simples quando os possveis casos so analisados. Suponha que o nodo a ser removido seja a raiz, apontada por T. Existem trs casos possveis: 1. T um nodo folha (no tem filhos): basta "destruir" T e faz-lo apontar para nulo. 2. T possui apenas um filho: basta "destruir" T e faz-lo apontar para o seu nodo filho. 3. T possui dois nodos filhos: para manter a rvore ordenada, h duas alternativas: substituir o contedo de T pelo contedo do nodo mais direita (maior chave) da subrvore esquerda de T. Este contedo inclui a chave e todos os demais campos, exceto os ponteiros para as sub-rvores esquerda e direita. substituir o contedo de T pelo contedo do nodo mais esquerda (menor chave) da sub-rvore direita de T. No terceiro caso, o nodo efetivamente removido (memria ou outros recursos liberados) o nodo mais direita da sub-rvore esquerda ou o nodo mais esquerda da sub-rvore direita. Ambos tm no mximo um descendente, pois se tivessem dois no poderiam ser considerados como extremos. A seguir, apresentado um algoritmo que utiliza a primeira alternativa. Ele faz uso da funo Antecessor, a qual percorre o extremo direito da sub-rvore esquerda de T, em busca do nodo mais direita, ou de maior chave. Ao encontrar o ponteiro X para este nodo, esta funo modifica (por referncia) o valor de X, fazendo-o apontar para a sua sub-vore esquerda, a qual pode existir ou no. funo Antecessor(PorRef X : ArvBin) : ArvBin declare r : ArvBin incio {X o nodo mais extremo, direita} se X^.D = nulo ento incio r X X X^.E retorne r fim seno {desce mais um nvel, pela direita} retorne Antecessor(X^.D) fim

UFGD / FACET Prof. Wellington Lima dos Santos Algoritmos e Estruturas de Dados II

funo ExcluiNodo_ArvBinPesq(PorRef T: ArvBin; K: inteiro) : lgico declare N: ArvBin incio se T = nulo ento {Abandona sem fazer nada} retorne falso se K = T^.Chave ento {chave encontrada!} incio N T se T^.E = nulo ento {T tem apenas a sub-rvore direita} T T^.D seno se T^.D = nulo ento {T tem apenas a sub-rvore esquerda} T T^.E seno {T tem as duas sub-rvores} incio N Antecessor(T^.E) {acha o nodo mais direita em T^.E} T^.K N^.K {substitui o contedo de T pelo de N} fim destroi(N) {libera os recursos alocados para N} retorne verdadeiro fim seno se K < T^.Chave ento retorne ExcluiNodo_ArvBinPesq(T^.E, K) seno retorne ExcluiNodo_ArvBinPesq(T^.D, K) fim

UFGD / FACET Prof. Wellington Lima dos Santos Algoritmos e Estruturas de Dados II

EXERCCIOS
1) Dada uma rvore binria, apontada por T, implemente em Portugol funes para retornar: a) A soma dos valores de todas as chaves. b) Um ponteiro para nodo que possui a maior chave. c) A altura da vore. d) O nmero de nodos folhas. e) O nvel de um nodo N. f) O nodo pai de um nodo N. g) Verdadeiro se T for uma rvore binria de pesquisa, ou falso, caso contraio. 2) Implemente em Portugol trs algoritmos para percorrer uma rvore binria em: pr-ordem (R, E, D); in-ordem (E, R, D); e ps-ordem (E, D, R). 3) Considere a rvore binria abaixo:
A B D H E I L F J C G K

a) Qual a altura da rvore? b) Quantos nodos folhas a rvore possui? c) A rvore do tipo AVL? Justifique. d) Como seriam listadas as chaves nos percursos em pr-ordem, in-ordem e ps-ordem? e) Represente a rvore utilizando parnteses aninhados e Diagrama de Venn. 4) Uma rvore binria denominada estritamente binria quando nenhum dos seus nodos possui apenas uma sub-rvore. Em outras palavras, cada nodo possui duas sub-rvores ou um nodo folha. Implemente em Portugol uma funo que receba um ponteiro T para uma rvore binria e retorne verdadeiro ou falso conforme uma rvore binria seja ou no seja estritamente binria. 5) Em uma rvore binria de pesquisa (ou rvore ordenada), todo nodo tem chave maior que a chave da sua sub-rvore esquerda e menor que a chave da sua sub-rvore direita. Implemente em Portugol uma funo que retorne verdadeiro ou falso caso uma rvore seja ou no seja uma rvore de pesquisa.

UFGD / FACET Prof. Wellington Lima dos Santos Algoritmos e Estruturas de Dados II

6) Uma rvore binria de pesquisa denominada AVL ou balanceada quando as alturas das subrvores esquerda e direita de qualquer nodo diferem de no mximo uma unidade. Implemente em Portugol uma funo que retorne verdadeiro ou falso caso uma rvore binria seja ou no seja uma rvore balanceada. 7) Porque o desbalanceamento de uma rvore binria de pesquisa afeta negativamente a eficincia da pesquisa de dados nesta estrutura? Complemente sua resposta atravs de um esquema. 8) Construa uma rvore de pesquisa, inserindo um a um cada letra do seu nome completo, at que a rvore tenha exatamente 8 nodos; lembre-se que s permitida uma ocorrncia de cada letra. Com base nesta rvore, pergunta-se: a) Qual a sua altura? b) Quantos nodos internos (aqueles que no so folhas ou terminais)? c) Quantos e quais so os nodos desbalanceados? d) Exclua da rvore o nodo que possui a terceira consoante do seu nome. 9) Em uma rvore binria de pesquisa, a insero de N registros cujas chaves esto em ordem crescente ou decrescente conduzem a uma rvore degenerada de altura N, na qual a pesquisa tem a mesma eficincia de uma lista encadeada, O(n). Implemente um algoritmo para gerar uma rvore balanceada, a partir de um vetor de N registros ordenados segundo suas chaves. Sugesto: Insira o registro central do vetor; agora considere uma partio (subvetor) anterior e outra posterior a esse registro; repita recursivamente os procedimentos anteriores at que todos os registros sejam inseridos. 10) Implemente uma funo em Portugol que retorne verdadeiro se duas rvores binrias T1 e T2 tm a mesma representao grfica, ou falso, caso contrrio.

UFGD / FACET Prof. Wellington Lima dos Santos Algoritmos e Estruturas de Dados II