Advertisement
Guest User

Untitled

a guest
Apr 20th, 2018
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.92 KB | None | 0 0
  1. #ifndef BST_CPP
  2. #define BST_CPP
  3.  
  4. #include"BST.h"
  5. #include<iostream>
  6. using namespace std;
  7.  
  8. template<class ItemType>
  9. BST<ItemType>::BST()
  10. {
  11. root = NULL;
  12. }
  13. template<class ItemType>
  14. BST<ItemType>::~BST()
  15. {
  16. Destroy(root);
  17. }
  18. template<class ItemType>
  19. void Destroy(TreeNode<ItemType>*& tree)
  20. {
  21. if(tree!=NULL)
  22. {
  23. Destroy(tree->left);
  24. Destroy(tree->right);
  25. delete tree;
  26. }
  27. }
  28. template<class ItemType>
  29. int BST<ItemType>::NumberOfNodes()const
  30. {
  31. return CountNodes(root);
  32. }
  33. template<class ItemType>
  34. int CountNodes(TreeNode<ItemType>*tree)
  35. {
  36. if(tree==NULL)
  37. return 0;
  38. else
  39. return CountNodes(tree->left)+CountNodes(tree->right)+1;
  40. }
  41. template<class ItemType>
  42. bool BST<ItemType>::IsEmpty()const
  43. {
  44. return (root==NULL);
  45. }
  46. template<class ItemType>
  47. void BST<ItemType>::InsertItem(ItemType item)
  48. {
  49. Insert(root,item);
  50. }
  51. template<class ItemType>
  52. void Insert(TreeNode<ItemType>*&tree,ItemType item)
  53. {
  54. if(tree==NULL)
  55. {
  56. tree=new TreeNode<ItemType>;
  57. tree->right=NULL;
  58. tree->left=NULL;
  59. tree->info=item;
  60. }
  61. else if(item<tree->info)
  62. Insert(tree->left,item);
  63. else
  64. Insert(tree->right,item);
  65. }
  66. template<class ItemType>
  67. void BST<ItemType>::RetrieveItem(ItemType&item,bool&found)
  68. {
  69. Retrieve(root,item,found);
  70. }
  71. template<class ItemType>
  72. void Retrieve(TreeNode<ItemType>*tree,ItemType&item,bool&found)
  73. {
  74. if(tree==NULL)
  75. found =false;
  76. else if(item<tree->info)
  77. Retrieve(tree->left,item,found);
  78. else if(item>tree->info)
  79. Retrieve(tree->right,item,found);
  80. else{
  81. item = tree->info;
  82. found = true;
  83. }
  84. }
  85. template<class ItemType>
  86. void BST<ItemType>::DeleteItem(ItemType item)
  87. {
  88. Delete(root,item);
  89. }
  90. template<class ItemType>
  91. void Delete(TreeNode<ItemType>*&tree,ItemType item)
  92. {
  93. if(item<tree->info)
  94. Delete(tree->left,item);
  95. else if(item>tree->info)
  96. Delete(tree->right,item);
  97. else DeleteNode(tree);
  98. }
  99. template<class ItemType>
  100. void GetPredecessor(TreeNode<ItemType>*tree,ItemType&item)
  101. {
  102. while(tree->right!=NULL)
  103. tree = tree->right;
  104. item = tree->info;
  105. }
  106. template<class ItemType>
  107. void DeleteNode(TreeNode<ItemType>*&tree)
  108. {
  109. ItemType data;
  110. TreeNode<ItemType>*tempPtr;
  111. tempPtr = tree;
  112. if(tree->left==NULL)
  113. {
  114. tree = tree->right;
  115. delete tempPtr;
  116. }
  117. else if(tree->right==NULL)
  118. {
  119. tree = tree->left;
  120. delete tempPtr;
  121. }
  122. else{
  123. GetPredecessor(tree->left,data);
  124. tree->info=data;
  125. Delete(tree->left,data);
  126. }
  127. }
  128. template<class ItemType>
  129. void BST<ItemType>::PrintTree()const
  130. {
  131. Preorder(root);
  132. }
  133. template<class ItemType>
  134. void Preorder(TreeNode<ItemType>*tree)
  135. {
  136. if(tree==NULL) return;
  137. cout<<tree->info<<ends;
  138. Preorder(tree->left);
  139. Preorder(tree->right);
  140. }
  141. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement