Posted By

cindri_marko on 01/19/15


Tagged

opcenito stabl


Versions (?)

Opcenito_stablo.h


 / Published in: C++
 

Opcenito_stablo.h

  1. #include <iostream>
  2. struct el{
  3. int Label,FirstChild,NextSibling;
  4. };
  5. struct tree{
  6. el element[1000];
  7. int First;
  8. };
  9.  
  10. tree *InitT(int X,tree *T){
  11. T = new tree;
  12. for(int i = 0; i < 1000; i++){
  13. T->element[i].Label = 0;
  14. T->element[i].FirstChild = T->element[i].NextSibling = -1;
  15. }
  16. T->element[X].Label = X;
  17. T->First = X;
  18. return T;
  19. }
  20.  
  21. int FirstChildT(int n, tree *T){
  22. return T->element[n].FirstChild;
  23. }
  24.  
  25. int NextSiblingT(int n, tree *T){
  26. return T->element[n].NextSibling;
  27. }
  28.  
  29. int ParentT(int n, tree *T){
  30. for(int i = 0; i < 1000; i++){
  31. if(T->element[i].FirstChild == n) return i;
  32. if(T->element[i].NextSibling == n) return ParentT(i,T);
  33. }
  34. }
  35.  
  36. int LabelT(int n, tree *T){
  37. return T->element[n].Label;
  38. }
  39.  
  40. int ChangeLabelT(int x,int n,tree *T){
  41. if(n<0) return -1;
  42. T->element[n].Label = x;
  43. }
  44.  
  45. int RootT(tree *T){
  46. return 0;
  47. }
  48.  
  49. void CreateT(int x,int n,tree *T){
  50. if(T->element[n].Label==0) std::cout<<"Ne postoji cvor "<<n<<" !"<<std::endl;
  51. else{
  52. if(T->element[n].FirstChild == -1) T->element[n].FirstChild = x;
  53. else if(T->element[T->element[n].FirstChild].NextSibling == -1) T->element[T->element[n].FirstChild].NextSibling = x;
  54. else{
  55. n = T->element[n].FirstChild;
  56. while(T->element[n].NextSibling != -1) n = T->element[n].NextSibling;
  57. T->element[n].NextSibling = x;
  58. }
  59. T->element[x].Label = T->element[n].Label + 1;
  60. T->element[x].FirstChild = T->element[x].NextSibling = -1;
  61. }
  62. }
  63.  
  64. int DeleteT(int x, tree *T){
  65. if(x<0) return -1;
  66. else{
  67. if(T->element[x].FirstChild>0) DeleteT(T->element[x].FirstChild,T);
  68. else{
  69. T->element[x].Label = -1;
  70. T->First--;
  71. }
  72. }
  73. }
  74.  
  75. void PreOrder(tree *T){
  76. int pomt;
  77. pomt = T->First;
  78. std::cout<<pomt<<" ";
  79. if(T->element[pomt].FirstChild != -1){
  80. T->First = T->element[pomt].FirstChild;
  81. PreOrder(T);
  82. }
  83. if(T->element[pomt].NextSibling != -1){
  84. T->First = T->element[pomt].NextSibling;
  85. PreOrder(T);
  86. }
  87. }
  88. void InOrder(tree *T){
  89. int pomt;
  90. pomt = T->First;
  91. if(T->element[pomt].FirstChild!=-1){
  92. T->First = T->element[pomt].FirstChild;
  93. InOrder(T);
  94. }
  95. int parent = ParentT(pomt,T);
  96. if(T->element[pomt].FirstChild == -1) std::cout<<pomt<<" ";
  97. if(FirstChildT(parent,T) == pomt) std::cout<<parent<<" ";
  98. if(T->element[pomt].NextSibling != -1){
  99. T->First = T->element[pomt].NextSibling;
  100. InOrder(T);
  101. }
  102. }
  103. void PostOrder(tree *T){
  104. int pomt = T->First;
  105. if(T->element[pomt].FirstChild != -1){
  106. T->First = T->element[pomt].FirstChild;
  107. PostOrder(T);
  108. }
  109. std::cout<<pomt<<" ";
  110. if(T->element[pomt].NextSibling != -1){
  111. T->First = T->element[pomt].NextSibling;
  112. PostOrder(T);
  113. }
  114. }

Report this snippet  

You need to login to post a comment.