Professional Documents
Culture Documents
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
j
|Figura 3| rvores 57
45
77
13
60
84
25
78
95
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
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