You are on page 1of 6

UNIP Cincia da Computao ---------------------------------------------------------------------------------------------------------Programao Lgica de Programao

RVORES
Uma rvore uma estrutura de dados bidimensional, no linear, que possui propriedades espaciais e admite muitas operaes de conjuntos dinmicos, tais como: consulta, insero, remoo, entre outros. diferente das listas e pilhas, uma vez que estas so estruturas de dados lineares. Uma rvore, de modo geral, possui as seguintes caractersticas: n raiz: n do topo da rvore, do qual descendem os demais ns. o primeiro n da rvore; n interior: n do interior da rvore (que possui descendentes); n terminal: n que no possui descendentes; trajetria: nmero de ns que devem ser percorridos at o n determinado; grau do n: nmero de ns descendentes do n, ou seja, o nmero de subrvores de um n; grau da rvore: nmero mximo de subrvores de um n; altura da rvore: nmero mximo de nveis dos seus ns; altura do n: nmero mximo de nveis dos seus ns; Para exemplificar a explicao sobre as caractersticas de uma rvore, vamos fazer uma anlise da rvore apresentada na figura 1: a

e i

k
|Figura 1| rvores

o n a determinado n raiz, tem grau dois pois possui dois filhos, os ns b e c, que tambm podem ser chamados de subrvores ou ns descendentes; o n b tem grau trs pois possui trs filhos : os ns d, e e f; o n b tambm denominado pai dos ns d, e e f; ----------------------------------------------------------------------------------------------------Prof. Marcelo Nogueira 1

UNIP Cincia da Computao ---------------------------------------------------------------------------------------------------------Programao Lgica de Programao os ns d e e so ns terminais, isto , no possuem descendentes e por isso tm grau zero; o n f tem grau dois e tem como filhos os ns i e j; o n i um n terminal e possui grau zero; o n j tem grau um e pai do n k, que terminal; o n c tem grau dois e pai dos ns g e h, que so ns terminais; a rvore possui grau trs, pois este o nmero mximo de ns descendentes de um nico pai; a rvore tem altura igual a 5, j o n b tem altura igual a 4, o n c tem altura igual a 2, o n k tem altura igual a 1 e assim por diante; para definirmos a trajetria a ser percorrida vamos supor que se deseje chegar ao n j, ento o caminho a ser percorrido ser a, b, f, j, conforme ilustrado na figura 2. a

e i

k
|Figura 2| Trajetria

As rvores podem ser do tipo listas generalizadas ou binrias. As rvores do tipo listas generalizadas possuem ns com grau maior ou igual a zero, enquanto uma rvore do tipo binria sempre possui ns com grau menor ou igual a 2. Veja os exemplos de rvores apresentados na Figura 3.

RVORES BINRIAS
Conforme j dissemos anteriormente, uma rvore binria sempre possui ns com grau menor ou igual a dois, isto , nenhum n possui mais do que dois descendentes

----------------------------------------------------------------------------------------------------Prof. Marcelo Nogueira

UNIP Cincia da Computao ---------------------------------------------------------------------------------------------------------Programao Lgica de Programao


rvore como lista generalizada rvore binria

j
|Figura 3| rvores 57

45

77

13

60

84

25

78

95

55 |Figura 4| rvore Binria

diretos (dois filhos). Nesse tipo de rvore tambm existe uma particularidade quanto posio dos ns: os ns da direita sempre possuem valor superior ao do n pai, e os ns da esquerda sempre possuem valor inferior ao do n pai. O algoritmo a seguir apresenta as variveis que sero utilizadas para a manipulao da rvore note que existe grande similaridade com os ns criados para manipulao das listas. O algoritmo tem a definio de um ----------------------------------------------------------------------------------------------------Prof. Marcelo Nogueira 3

UNIP Cincia da Computao ---------------------------------------------------------------------------------------------------------Programao Lgica de Programao registro que possui as variveis valor, esq e dir, a varivel apontador, que ser utilizada para fazer a referncia a ns localizados direita e a esquerda (da raiz ou do n pai), e a varivel raiz, que guardar o valor do n raiz da rvore. EXEMPLO 1: PSEUDOCDIGO QUE REPRESENTA UMA RVORE BINRIA.
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. algoritmo BArvore aaatipo apontador: ^no_arvore aaatipo no_arvore: registro aaaaaaaaaaaaaaaaaaavalor: inteiro aaaaaaaaaaaaaaaaaaaesq: apontador aaaaaaaaaaaaaaaaaadir: apontador aaatipo no_arvore: fim aaavar aaavarraiz: apontador Funo inserir (arvore: no_arvore, novoNo: inteiro): no_arvore aaavar aaavarapoio: no_arvore aaainicio aaavarSe (arvore = nulo) ento aaavarSe apoio.valor novoNo aaavarSe retorne (apoio) aaavarSeno aaavarSe Se (novoNo < arvore.valor) ento aaavarSe Se arvore^.esq inserir(arvore^.esq, novoNo) aaavarSe Seno aaavarSe Se arvore^.dir inserir(arvore^.dir, novoNo) aaavarSe Fim-se aaavarFim-se aaavarretorne (arvore) aaaFim Procedimento inserirNo (novoValor: inteiro) aaainicio aaavarraiz inserir (raiz,novoValor) aaafim Procedimento exibir_esquerdo aaaarv: no_arvore aaainicio aaainiarv raiz aaainiSe (arv <> nulo) ento aaainiSe (mostre(arv ^.valor) exibir_esquerdo(arv ^.esq) aaainifim Procedimento exibir_direito aa arv: no_arvore aa inicio aa iniarv raiz aa iniinicio aa iniiniSe (arv <> nulo) ento aa iniiniSe (mostre (arv^.valor) exibir_direito (arv^.dir) aa iniinifim u

----------------------------------------------------------------------------------------------------Prof. Marcelo Nogueira

UNIP Cincia da Computao ---------------------------------------------------------------------------------------------------------Programao Lgica de Programao


51. 52. 53. 54. Procedimento exibir_raiz( ) aaainicio aaainimostre (Raiz, raiz) aaafim

Os comentrios sero feitos juntamente com os comentrios do programa. EXEMPLO 2: PSEUDOCDIGO


1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47.
PARA REPRESENTAR O PROCEDIMENTO DA EXCLUSO DE NS COM RVORES BINRIAS.

Procedimento excluirNo (item: inteiro) var aaatempNo: no_arvore aaapai: no_arvore aaafilho: no_arvore aaatemp: no_arvore inicio aaatempNo raiz aaapai nulo aaafilho raiz aaaEnquanto (tempNo < > nulo .e. tempNo^.valor < > item) faa aaaEnqpai tempNo aaaEnqSe(item < tempNo^.valor) ento aaaEnqSe(tempNo tempNo^.esq aaaEnqSeno aaaEnqSeatempNo tempNo^.dir aaaEnqFim-se aaaEnqSe (tempNo = nulo) ento aaaEnqSe (Mostre (item no localizado) aaaEnqFim-se aaaEnqSe (pai = nulo) ento aaaEnqSe (Se (tempNo^.dir = nulo) aaaEnqSe (Se (raiz tempNo^.esq aaaEnqSe (Fim-se aaaEnqSe (Se (tempNo.esq = nulo) aaaEnqSe (Se (raiz tempNo^.dir aaaEnqSe (Fim-se aaaEnqSeno aaaEnqSe (temp tempNo aaaEnqSe (filho tempNo^.esq aaaEnqSe (Enquanto (filho.dir < > nulo) faa aaaEnqSe (Enqtemp filho aaaEnqSe (Enq filho filho^.dir aaaEnqSe (Fim-enquanto aaaEnqSe (Se (filho < > tempNo^.esq) ento aaaEnqSe (Se temp^.dir filho.^esq aaaEnqSe (Se temp.^esq raiz.^esq aaaEnqSe (Fim-se aaaEnqSe (filho.^dir raiz.^dir aaaEnqSe (raiz filho aaaEnqFim-se aaaEnqSe (tempNo.^dir = nulo) ento aaaEnqSe Se (pai.^esq = tempNo.^esq aaaEnqSe Se (pai.^esq tempNo.^esq aaaEnqSe Seno aaaEnqSe Se (pai.^dir tempNo.^esq aaaEnqSe Fim-se

----------------------------------------------------------------------------------------------------Prof. Marcelo Nogueira

UNIP Cincia da Computao ---------------------------------------------------------------------------------------------------------Programao Lgica de Programao


48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. aaaEnqSeno aaaEnqSe Se (tempNo^.esq = tempNo) ento aaaEnqSe Se Se (pai.^esq = tempNo) ento aaaEnqSe Se Se (pai^.esq tempNo^.dir aaaEnqSe Se Seno aaaEnqSe Se Se (pai^.dir tempNo^.dir aaaEnqSe Se fim-se aaaEnqSe Seno aaaEnqSe Se (temp tempNo aaaEnqSe Se (filho tempNo^.esq aaaEnqSe Se (Enquanto (filho.dir < > nulo) faa aaaEnqSe Se (Enqtemp filho aaaEnqSe Se (Enqfilho filho^.dir aaaEnqSe Se (Fim-enquanto aaaEnqSe Se (Se (filho < > tempNo.esq) ento aaaEnqSe Se (Enqtemp.^dir filho.esq aaaEnqSe Se (Enqfilho.^esq tempNo.esq aaaEnqSe Se (Fim-se aaaaaaaaaaaafilho.^dir tempNo.^dir aaaaaaaaaaaaSe (pai^.esq = tempNo) ento aaaaaaaaaaaaSe (pai.^esq filho aaaaaaaaaaaaSeno aaaaaaaaaaaaSe (pai.^dir filho aaaaaaaaaaaafim-se aaaEnqSe Seno fim

----------------------------------------------------------------------------------------------------Prof. Marcelo Nogueira

You might also like