Advertisement
Guest User

Untitled

a guest
Apr 23rd, 2014
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.58 KB | None | 0 0
  1. #include<iostream>
  2.  
  3. template<class Elem>
  4. class BinNode
  5. {
  6. public:
  7. virtual Elem& getVal() = 0;
  8. };
  9.  
  10. template<class Elem>
  11. class BinNodePtr:public BinNode<Elem>
  12. {
  13. public:
  14. Elem val;
  15. BinNodePtr* lc;
  16. BinNodePtr* rc;
  17. BinNodePtr()
  18. {
  19. lc = rc = NULL;
  20. }
  21. ~BinNodePtr()
  22. {
  23. delete lc;
  24. delete rc;
  25. }
  26. Elem& getVal()
  27. {
  28. return this->val;
  29. }
  30. };
  31.  
  32. template<class Elem>
  33. class BST
  34. {
  35. public:
  36. BinNodePtr<Elem> *root;
  37. int nodenum;
  38. void midorder(BinNodePtr<Elem>* start);
  39. public:
  40. BST()
  41. {
  42. root = NULL;
  43. nodenum = 0;
  44. }
  45. bool insert(BinNodePtr<Elem>*&ptr,const Elem &e);//
  46. void remove(BinNodePtr<Elem>*&start,const Elem &e);//
  47. BinNodePtr<Elem>* getRoot(){return root;}
  48. };
  49.  
  50. template<class Elem>
  51. void BST<Elem>::midorder(BinNodePtr<Elem> *start)
  52. {
  53. if(start == NULL) return;
  54. midorder(start->lc);
  55. printf("%d ",start->getVal());
  56. midorder(start->rc);
  57. }
  58.  
  59. template<class Elem>
  60. bool BST<Elem>::insert(BinNodePtr<Elem>*&ptr,const Elem &e)
  61. {
  62. if(ptr == NULL)
  63. {
  64. ptr = new BinNodePtr<Elem>;
  65. ptr->lc = NULL;
  66. ptr->rc = NULL;
  67. ptr->val = e;
  68. return true;
  69. }
  70. else
  71. {
  72. if(ptr->val < e || ptr->val == e)
  73. {
  74. insert(ptr->rc,e);
  75. }
  76. else
  77. {
  78. insert(ptr->lc,e);
  79. }
  80. }
  81. return false;
  82. }
  83.  
  84. template<class Elem>
  85. void BST<Elem>::remove(BinNodePtr<Elem>*&start,const Elem &e)
  86. {
  87. if(start == NULL)
  88. return ;
  89. if(start->val < e)
  90. remove(start->rc,e);
  91. else if(start->val > e)
  92. remove(start->lc,e);
  93. else
  94. {
  95. if(start->lc == NULL && start->rc == NULL)
  96. {
  97. delete start;
  98. }
  99. else if(start->lc == NULL)
  100. {
  101. BinNodePtr<Elem> *temp = start;
  102. start = start->rc;
  103. delete (temp);
  104. }
  105. else if(start->rc == NULL)
  106. {
  107. BinNodePtr<Elem> *temp = start;
  108. start = start->lc;
  109. delete temp;
  110. }
  111. else
  112. {
  113. BinNodePtr<Elem>* temp = start->rc;
  114. while(temp->lc!= NULL)
  115. {
  116. temp = temp->lc;
  117. }
  118. start->val = temp->val;
  119. remove(start->rc,temp->val);
  120. }
  121.  
  122. }
  123. }
  124. int main()
  125. {
  126. BST<int> myBST;
  127. (myBST.insert(myBST.root,10));
  128. (myBST.insert(myBST.root,20));
  129. (myBST.insert(myBST.root,5));
  130. (myBST.insert(myBST.root,30));
  131. myBST.midorder(myBST.getRoot());
  132. myBST.remove(myBST.root,10);
  133. myBST.midorder(myBST.getRoot());
  134. system("pause");
  135. return 0;
  136. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement