Binarno stablo pokazivaci


/ Published in: C++
Save to your folder(s)

4


Copy this code and paste it in your HTML
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. struct tbstablo{
  5. int oznaka;
  6. tbstablo *lc,*rc;
  7. };
  8. typedef tbstablo* cvor;
  9. typedef cvor btree;
  10.  
  11.  
  12. cvor parentB(cvor n, btree stablo){
  13. cvor parentL=NULL, parentR=NULL;
  14. if (stablo->lc == n || stablo->rc == n) //ako je lijevo dijete stabla ili desno dijete stabla jednako tom cvoru vrati adresu stabla
  15. return stablo;
  16. if (stablo->lc) //u suprotnom ako postoji lijevo dijete trazi lijevo
  17. parentL = parentB(n, stablo->lc);
  18. if (stablo->rc) //ako postoji desno dijete trazi desno
  19. parentR = parentB(n, stablo->rc);
  20. if (parentL) //ako je razl. od NULL tada je roditelj nadjen kod lijevog dijeteta
  21. return parentL;
  22. if (parentR) //ako je razl. od NULL tada je roditelj nadjen kod desnog dijeteta
  23. return parentR;
  24. return NULL; //inace vrati NULL(nije nadjen roditelj,tj. ne postoji roditelj)
  25. }
  26.  
  27. cvor leftchildB(cvor n,btree stablo){
  28. return n->lc;
  29. }
  30. cvor rightchildB(cvor n,btree stablo){
  31. return n->rc;
  32. }
  33. int labelB(cvor n, btree stablo){
  34. return n->oznaka;
  35. }
  36. void changelabelB(int x, cvor n,btree stablo){
  37. n->oznaka=x;
  38. }
  39. cvor rootB(btree stablo){
  40. return stablo;
  41. }
  42. void createleftB(int x,cvor n,btree stablo){
  43. if(n->lc)
  44. cout<<"Cvor je zauzet!"<<endl;
  45. else{
  46. cvor novi=new tbstablo;
  47. n->lc=novi;
  48. novi->lc=NULL;
  49. novi->rc=NULL;
  50. novi->oznaka=x;
  51. }
  52. }
  53. void createrightB(int x,cvor n,btree stablo){
  54. if(n->rc)
  55. cout<<"Cvor je zauzet!"<<endl;
  56. else{
  57. cvor novi=new tbstablo;
  58. n->rc=novi;
  59. novi->lc=NULL;
  60. novi->rc=NULL;
  61. novi->oznaka=x;
  62. }
  63. }
  64. void deleteB (cvor n,btree stablo) {
  65. if (n->lc)
  66. deleteB(n->lc, stablo);
  67. if (n->rc)
  68. deleteB(n->rc, stablo);
  69. if (n != rootB(stablo) && leftchildB(parentB(n, stablo),stablo)==n)
  70. parentB(n, stablo)->lc = NULL;
  71. else if (n != rootB(stablo))
  72. parentB(n, stablo)->rc = NULL;
  73. cout << "Izbrisan cvor " << n->oznaka << "." << endl;
  74. cout<< "Adresa lijevog dijeteta dvora:"<<n->lc<<endl;
  75. cout<< "Adresa desnog dijeteta cvora:"<<n->rc<<endl;
  76. delete n;
  77. }
  78.  
  79. void initB(int x,btree stablo){
  80. stablo->lc = stablo->rc = NULL;
  81. stablo->oznaka = x;
  82. }

Report this snippet


Comments

RSS Icon Subscribe to comments

You need to login to post a comment.