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

Algoritmos recursivos em rvores

Algoritmos recursivos em rvores


1. Percurso
Um algoritmo de percurso em uma rvore algum algoritmo que liste todos os elementos desta rvore, sem repetio. As idias envolvidas neste tipo de algoritmo podem ser aplicadas a outros algoritmos capazes de responder muitas perguntas importantes, por exemplo: 1. Quantos ns a rvore possui? 2. Quantos ns com uma determinada propriedade a rvore possui? Por exemplo, quantos ns terminais (sem nenhum filho) a rvore possui? 3. Qual o valor mximo de uma propriedade dos ns na rvore? Por exemplo, qual o nmero de ns do n que tem mais ns (grau ou ordem da rvore)? 4. Qual a representao da rvore em alguma forma especial? Por exemplo, a representao LISP. Todos estes algoritmos sero definidos e implementados recursivamente de maneira bem mais simples do que iterativamente. Neste captulo estudaremos as definies recursivas. O percurso em pr-ordem ou pr-fixado definido da seguinte maneira: Primeiro a raiz visitada; depois, cada uma de suas sub-rvores da esquerda para a direita percorrida em pr-ordem. Observamos que visitar, aqui, significa que o n impresso na tela ou usado para algum outro fim (por exemplo, calcular alguma coisa). Nesta seo, visitar significar imprimir. Vamos ilustrar o percurso em pr-ordem com alguns exemplos ilustrados abaixo: Na rvore (1), a definio imediata: o percurso em pr-ordem A B C. Na rvore (2), o percurso em prordem deve ser efetuado da seguinte maneira: primeiro a raiz A; depois a sub-rbvore A1, em pr-ordem; depois C. Mas a sub-rvore A1 em pr-ordem B D E. Assim, o percurso em pr-ordem da rvore (2) A B D E C.

Algoritmos recursivos em rvores

Na rvore (3), a determinao do percurso em pr-ordem foi esquematizada ao lado. preciso decompor as sub-rvores A1, A2 e B2 em pr-ordem. O resultado final A B D E F G H C I. Note que para obter a listagem de uma rvore em pr-ordem basta escrever a sua expresso LISP e retirar os parnteses e as vrgulas. O percurso em ps-ordem ou ps-fixado definido da seguinte maneira: Primeiro visitamos todas as sub-rvores da raiz da esquerda para a direita em psordem; por ltimo a raiz visitada. Assim, a rvore (1) listada em pr-ordem B C A e a rvore (2) D E B C A. O esquema abaixo ilustra a listagem da rvore 3 em ps-ordem:

Podemos notar que a raiz sempre o primeiro elemento no percurso em pr-ordem e o ltimo no percirso em ps-ordem. Apenas para rvores binrias, definimos tambm o percurso em-ordem, ou central da seguinte maneira: Percorremos primeiro a sub-rvore esquerda (se houver) em-ordem; depois visitamos a raiz; e por ltimo a percorremos a sub-rvore direita (se houver) em-ordem. As rvores (1) e (2) acima so binrias. Aplicando o percurso em-ordem arvore (1), obtemos B A C. J a rvore (2) percorrida em-ordem D B E A C. O exemplo mais complexo da rvore (4) abaixo esquematizado ao lado:

Algoritmos recursivos em rvores

Note que a rvore B1 no tem sub-rvore esquerda. Assim, sua listagem em-ordem a raiz D seguida da sub-rvore direita E. Da mesma forma, A2 no tem sub-rvore direita, logo sua listagem em-ordem a subrvore esquerda F seguida da raiz C. Em geral, impossvel reconstruir uma rvore pelas suas listagens em pr-ordem, ps-ordem ou em-ordem. Este fato ilustrado pelas duas arvores ao lado: ambas tm a mesma listagem em pr-ordem A B C.

2. Percursos em rvores de expresses aritmticas


Considere a rvore ao lado, que corresponde expresso aritmtica (a + b) * (c d). As suas listagens emordem, pr-ordem e ps-ordem correspondem a notaes matemticas conhecidas: 1. Em-ordem: a + b * c d 2. Pr-ordem: * + a b - c d 3. Ps-ordem: a b + c d - * A listagem em-ordem quase corresponde notao algbrica (a + b) * (c d), pois faltam os parnteses, que neste caso so essenciais! Para conseguirmos a notao algbrica, devemos modificar o algoritmo de listagem em-ordem para inserir os parnteses necessrios. A listagem em pr-ordem resulta na chamada notao polonesa ou prefixa. Esta notao foi inventada pelo matemtico polons J. ukasiewicz para escrever expresses aritmticas sem a necessidade de parnteses. A listagem em ps-ordem resulta na notao polonesa reversa ou infixa, usada em muitas calculadoras cientficas, e tambm capaz de expressar qualquer expresso aritmtica sem parnteses. Observamos que possvel reconstruir a rvore de uma expresso aritmtica atravs de suas listagens em pr-ordem e ps-ordem pois temos as informaes adicionais de que a rvore estritamente binria, os nmeros ou letras so ns terminais e as operaes so os ns internos. No entanto, impossvel reconstruir a rvore atravs da listagem em-ordem.

3. Outros algoritmos recursivos em rvores


Muitos algoritmos relacionados a rvores encontram uma forma extremamente simples se formulados recursivamente. O exemplo mais simples a contagem do nmero total de ns em uma rvore. Este algoritmo se define assim: Se a rvore composta apenas da raiz, o nmero de ns 1. Caso contrrio, o nmero de ns 1 mais o nmero de ns de cada uma das sub-rvores da raiz. Note que esta definio recursiva, pois define o nmero de ns da rvore em termos no nmero de ns das sub-rvores. Quando o algoritmo chega a uma sub-rvore composta apenas de sua raiz (isto , de um n sem filhos), ele capaz de dar uma resposta concreta, isto 1. Caso contrrio, o nmero de ns tem que ser definido em termos do nmero de ns das sub-rvores.

Algoritmos recursivos em rvores Um outro exemplo simples o clculo da profundidade: Se a rvore composta apenas da raiz, a sua profundidade 0. Caso contrrio, a profundidade 1 mais o mximo das profundidades de cada uma das sub-rvores da raiz.

Claramente, se a rvore composta apenas da raiz, seu nvel mximo 0 e, portanto, sua profundidade 0. Caso contrrio, a sua profundidade ser definida pela sub-rvore mais profunda. Observando a rvore (3) acima, vemos que a profundidade definida pela sub-rvore A1, pois ela mais profunda que a sub-rvore A2.

4. Exerccios
1. Para cada uma das rvores da figura abaixo, faa o percurso em pr-ordem, ps-ordem e emordem

2. Uma rvore cheia tem listagem em pr-ordem A B C D E F G. Desenhe esta rvore. Repita o exerccio considerando que a listagem foi dada em ps-ordem e em-ordem. 3. Modifique o algoritmo de listagem em-ordem de rvores aritmticas para que sejam inseridos parnteses. O algoritmo no deve inserir parnteses em torno dos nmeros. Por exemplo, no deve escrever (a) * ((b) + (c)), mas somente a * (b + c). 4. Descreva os algoritmos recursivos cara calcular a ordem (ou grau) e o nmero de ns terminais (ou folhas) de uma rvore. 5. Descreva o algoritmo recursivo para calcular o valor da expresso aritmtica contida em uma rvore.

Вам также может понравиться