Posted By

mogrguric on 01/05/11


Tagged

sp4


Versions (?)

bstablo pokazivac


 / Published in: C++
 

  1. struct element {
  2. int label;
  3. element *left, *right;
  4. };
  5.  
  6. typedef element *node;
  7. typedef element bt;
  8.  
  9. //funkcija vraca roditelja cvora n
  10. node ParentB(node n, bt *tree){
  11. if(n==tree)
  12. return NULL;
  13. node starac=NULL;
  14. if(tree->left) {
  15. if(tree->left==n)
  16. return tree;
  17. else
  18. starac=ParentB(n,tree->left);
  19. }
  20. if(tree->right) {
  21. if(tree->right==n)
  22. return tree;
  23. else
  24. starac=ParentB(n,tree->right);
  25. }
  26. return starac;
  27. }
  28.  
  29.  
  30. //funkcija vraca lijevo dijete cvora n. Ako čvor n nema lijevog djeteta, onda vraća null-cvor
  31. node LeftChildB(node n, bt *tree){
  32. if(!n || !n->left)
  33. return NULL;
  34. return n->left;
  35. }
  36.  
  37. //funkcija vraca desno dijete cvora n. Ako čvor n nema desnog djeteta, onda vraća null-cvor
  38. node RightChildB(node n, bt *tree){
  39. if(!n || !n->right)
  40. return NULL;
  41. return n->right;
  42. }
  43.  
  44. //funkcija koja vraca oznaku (vrijednost) koju sadrži cvor n
  45. int LabelB(node n, bt *tree){
  46. return n->label;
  47. }
  48.  
  49. //mijenja oznaku cvora n u stablu tree na vrijednost x
  50. void ChangeLabelB(int x, node n, bt *tree){
  51. if(!n)
  52. return;
  53. n->label=x;
  54. }
  55.  
  56. //funkcija koja vraca korijen binarnog stabla T. Ako je stablo prazno,onda vraća null-cvor
  57. node RootB(bt *tree){
  58. if(!tree)
  59. return NULL;
  60. return tree;
  61. }
  62.  
  63. //Procedura dodaje x kao lijevo dijete cvora n.
  64. //Ako cvor n već ima lijevo dijete, onda se javlja poruka pogreske.
  65. void CreateLeftB(int x, node n, bt *tree){
  66. if(n->left) {
  67. cout << "Pogreska!" << endl;
  68. return; }
  69. node novi=new element;
  70. n->left=novi;
  71. novi->label=x;
  72. novi->left=NULL;
  73. novi->right=NULL;
  74. }
  75.  
  76.  
  77. //Procedura dodaje x kao desno dijete cvora n.
  78. //Ako cvor n ve&#263; ima lijevo dijete, onda se javlja poruka pogreske.
  79. void CreateRightB(int x, node n, bt *tree){
  80. if(n->right) {
  81. cout << "Pogreska!" << endl;
  82. return; }
  83. node novi=new element;
  84. n->right=novi;
  85. novi->label=x;
  86. novi->left=NULL;
  87. novi->right=NULL;
  88. }
  89.  
  90. //procedura brise cvor n, a s njim i sve njegove potomke iz stabla tree
  91. void DeleteB(node n, bt *tree){
  92. static bool prvo=false;
  93. if(!prvo) {
  94. node starac=ParentB(n,tree);
  95. if(starac->left==n)
  96. starac->left=NULL;
  97. else
  98. starac->right=NULL;
  99. prvo=true; }
  100. if(n->left)
  101. DeleteB(n->left,tree);
  102. if(n->right)
  103. DeleteB(n->right,tree);
  104. delete n;
  105. }
  106.  
  107. //inicijalizira stablo tree s korijenom x
  108. bt* InitB(int x, bt *tree){
  109. tree=new element;
  110. tree->label=x;
  111. tree->left=NULL;
  112. tree->right=NULL;
  113. return tree;
  114. }

Report this snippet  

You need to login to post a comment.