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! ". Quantos ns com uma determinada propriedade a rvore possui! #or exemplo, quantos ns terminais $sem nen%um &il%o' a rvore possui! (. Qual o valor mximo de uma propriedade dos ns na rvore! #or exemplo, qual o n)mero de ns do n que tem mais ns $grau ou ordem da rvore'! *. Qual a representao da rvore em alguma &orma especial! #or exemplo, a representao +,-#. .odos estes algoritmos sero de&inidos e implementados recursivamente de maneira /em mais simples do que iterativamente. 0este cap1tulo estudaremos as de&ini2es recursivas. 3 percurso em pr-ordem ou pr-fixado de&inido da seguinte maneira: primeiro a raiz visitada4 depois, cada uma de suas su/5rvores da raiz da esquerda para a direita visitada em pr5 ordem. 3/servamos que 6visitar7, aqui, signi&ica que o n impresso na tela ou usado para algum outro &im $por exemplo, calcular alguma coisa'. 0esta seo, 6visitar7 signi&icar imprimir. 8amos ilustrar o percurso em pr5ordem com alguns exemplos ilustrados a/aixo: 0a rvore $1', a de&inio imediata: o percurso em pr5ordem A 9 :. 0a rvore $"', o percurso em pr5 ordem deve ser e&etuado da seguinte maneira: primeiro a raiz A4 depois a su/5r/vore A1,, em pr5ordem4 depois :. ;as a su/5rvore A1 em pr5ordem 9 < =. Assim, o percurso em pr5ordem da rvore $"' A 9 < = :. Algoritmos recursivos em rvores " 0a rvore $(', a determinao do percurso em pr5ordem &oi esquematizada ao lado. > preciso decompor as su/5rvores A1, A" e 9" em pr5ordem. 3 resultado &inal A 9 < = ? @ A : ,. 0ote que para o/ter a listagem de uma rvore em pr5ordem /asta escrever a sua expresso +,-# e retirar os parBnteses e as v1rgulas. <e&inimos tam/m outro percurso em rvores c%amado ps-ordem ou ps-fixada. 0este percurso, primeiro visitamos todas as su/5rvores da raiz da esquerda para a direita em ps5ordem e por )ltimo a raiz. Assim, a rvore $1' listada em pr5ordem 9 : A e a rvore $"' < = 9 : A. 3 esquema a/aixo ilustra a listagem da rvore ( em ps5ordem: #ara rvores /inrias, de&inimos tam/m o percurso em-ordem, ou central. 0este percurso, visitamos primeiro a su/5rvore esquerda $se %ouver' em5ordem, depois a raiz e por )ltimo a su/5 rvore direita $se %ouver' em5ordem. As rvores $1' e $"' acima so /inrias. Aplicando o percurso em5ordem C arvore $1', o/temos 9 A :. D a rvore $"' percorrida em5ordem < 9 = A :. 3 exemplo mais complexo da rvore $*' a/aixo esquematizado ao lado: 0ote que a rvore 91 no tem su/5rvore esquerda. Assim, sua listagem em5ordem a raiz < seguida da su/5rvore direita =. <a mesma &orma, A" no tem su/5rvore direita, logo sua listagem em5ordem a su/rvore esquerda ? seguida da raiz :. Algoritmos recursivos em rvores ( 2. Percursos em rvores de expresses aritmticas :onsidere a rvore ao lado, que corresponde C expresso aritmtica $a E /' F $c G d'. As suas listagens em5 ordem, pr5ordem e ps5ordem correspondem a nota2es matemticas con%ecidas: 1. =m5ordem: a E / F c G d ". #r5ordem: F E a / 5 c d (. #s5ordem: a / E c d 5 F A listagem em5ordem quase corresponde C notao alg/rica $a E /' F $c G d', pois &altam os parBntesesH #ara conseguirmos a notao alg/rica, devemos modi&icar o algoritmo de listagem em5 ordem para inserir os parBnteses necessrios. A listagem em pr5ordem resulta na c%amada notao polonesa ou prefixa. =sta notao &oi inventada pelo matemtico polonBs D. IuJasieKicz para escrever express2es aritmticas sem a necessidade de parBnteses. A listagem em ps5ordem resulta na notao polonesa reversa ou infixa, usada em muitas calculadoras cient1&icas. 3. Outros algoritmos recursivos em rvores ;uitos algoritmos relacionados a rvores encontram uma &orma extremamente simples se &ormulados recursivamente. 3 exemplo mais simples a contagem do n)mero total de ns em uma rvore. =ste algoritmo se de&ine 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. 0ote que esta de&inio recursiva, pois de&ine o n)mero de ns da rvore em termos no n)mero de ns das su/5rvores. Quando o algoritmo c%ega a uma su/5rvore composta apenas de sua raiz $isto , de um n sem &il%os', ele capaz de dar uma resposta concreta, isto 1. :aso contrrio, o n)mero de ns tem que ser de&inido em termos do n)mero de ns das su/5rvores. Um outro exemplo simples o clculo da pro&undidade: 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. :laramente, se a rvore composta apenas da raiz, seu n1vel mximo L e, portanto, sua pro&undidade L. :aso contrrio, a sua pro&undidade ser de&inida pela su/5rvore mais pro&unda. 3/servando a rvore $(' acima, vemos que a pro&undidade de&inida pela su/5rvore A1, pois ela mais pro&unda que a su/5rvore A". Algoritmos recursivos em rvores * 4. Exerccios 1. #ara cada uma das rvores da &igura a/aixo, &aa o percurso em pr5ordem, ps5ordem e em5 ordem ". Uma rvore c%eia tem listagem em pr5ordem A 9 : < = ? @. <esen%e esta rvore. Mepita o exerc1cio considerando que a listagem &oi dada em ps5ordem e em5ordem. (. ;odi&ique o algoritmo de listagem em5ordem de rvores aritmticas para que seNam inseridos parBnteses. 3 algoritmo no deve inserir parBnteses em torno dos n)meros. #or exemplo, no deve escrever $a' F $$/' E $c'', mas somente a F $/ E c'. *. <escreva os algoritmos recursivos cara calcular a ordem $ou grau' e o n)mero de ns terminais $ou &ol%as' de uma rvore. O. <escreva o algoritmo recursivo para calcular o valor da expresso aritmtica contida em uma rvore.