Advertisement
Guest User

Untitled

a guest
Mar 31st, 2020
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.71 KB | None | 0 0
  1. /*
  2. NodeCount.cpp
  3. Ryan Schumacher
  4. Version 1.0
  5. 3-31-20
  6. Program checks to add certain inventory selections to a queue. The user will be prompted and asked if they want to add something to a queue and if they select yes then they will be allowed to enter into different portions of the inventory.
  7. If they select no, then the program will ask if they want to remove something instead. If yes, the program will initiate the dequeue function to remove the topmost item in the queue. If the user inputs no, then the program will display final queue results
  8. and then simply end.
  9. */
  10. #include <iostream>
  11. #ifndef INTBINARYTREE_H
  12. #define INTBINARYTREE_H
  13. using namespace std;
  14. class IntBinaryTree
  15. {
  16. private:
  17. struct TreeNode
  18. {
  19. int value; // The value in the node
  20. TreeNode *left; // Pointer to left child node
  21. TreeNode *right; // Pointer to right child node
  22. };
  23. TreeNode *root; // Pointer to the root node
  24. // Private member functions
  25. void insert(TreeNode *&, TreeNode *&);
  26. void destroySubTree(TreeNode *);
  27. void deleteNode(int, TreeNode *&);
  28. void makeDeletion(TreeNode *&);
  29. int countNodesrecursive(TreeNode *);
  30. int countNodes(IntBinaryTree *);
  31. void displayInOrder(TreeNode *) const;
  32. void displayPreOrder(TreeNode *) const;
  33. void displayPostOrder(TreeNode *) const;
  34. public:
  35. // Constructor
  36. IntBinaryTree()
  37. {
  38. root = nullptr;
  39. }
  40. // Destructor
  41. ~IntBinaryTree()
  42. {
  43. destroySubTree(root);
  44. }
  45. // Binary tree operations
  46. void insertNode(int);
  47. bool searchNode(int);
  48. void remove(int);
  49. void displayInOrder() const
  50. {
  51. displayInOrder(root);
  52. }
  53. void displayPreOrder() const
  54. {
  55. displayPreOrder(root);
  56. }
  57. void displayPostOrder() const
  58. {
  59. displayPostOrder(root);
  60. }
  61. };
  62. #endif
  63.  
  64.  
  65.  
  66. //insert Member Function inserts a node
  67. void IntBinaryTree::insert(TreeNode *&nodePtr, TreeNode *&newNode)
  68. {
  69. if (nodePtr == nullptr)
  70. nodePtr = newNode; // Insert the node.
  71. else if (newNode->value < nodePtr->value)
  72. insert(nodePtr->left, newNode); // Search the left branch
  73. else
  74. insert(nodePtr->right, newNode); // Search the right branch
  75. }
  76.  
  77. //insertNode Member Function calls insert function
  78. void IntBinaryTree::insertNode(int num)
  79. {
  80. TreeNode *newNode = nullptr; // Pointer to a new node.
  81. // Create a new node and store num in it.
  82. newNode = new TreeNode;
  83. newNode->value = num;
  84. newNode->left = newNode->right = nullptr;
  85. // Insert the node.
  86. insert(root, newNode);
  87. }
  88.  
  89. //destrySubTree Member Function
  90. void IntBinaryTree::destroySubTree(TreeNode *nodePtr)
  91. {
  92. if (nodePtr)
  93. {
  94. if (nodePtr->left)
  95. destroySubTree(nodePtr->left);
  96. if (nodePtr->right)
  97. destroySubTree(nodePtr->right);
  98. delete nodePtr;
  99. }
  100. }
  101.  
  102. //Search tree member function
  103. bool IntBinaryTree::searchNode(int num)
  104. {
  105. TreeNode *nodePtr = root;
  106. while (nodePtr)
  107. {
  108. if (nodePtr->value == num)
  109. return true;
  110. else if (num < nodePtr->value)
  111. nodePtr = nodePtr->left;
  112. else
  113. nodePtr = nodePtr->right;
  114. }
  115. return false;
  116. }
  117.  
  118. //remove Member Function calls deleteNode Member Function
  119. void IntBinaryTree::remove(int num)
  120. {
  121. deleteNode(num, root);
  122. }
  123.  
  124. //deleteNode Member Function
  125. void IntBinaryTree::deleteNode(int num, TreeNode *&nodePtr)
  126. {
  127. if (num < nodePtr->value)
  128. deleteNode(num, nodePtr->left);
  129. else if (num > nodePtr->value)
  130. deleteNode(num, nodePtr->right);
  131. else
  132. makeDeletion(nodePtr);
  133. }
  134.  
  135.  
  136. void IntBinaryTree::makeDeletion(TreeNode *&nodePtr)
  137. {
  138. // Define a temporary pointer to use in reattaching
  139. // the left subtree.
  140. TreeNode *tempNodePtr = nullptr;
  141. if (nodePtr == nullptr)
  142. cout << "Cannot delete empty node.\n";
  143. else if (nodePtr->right == nullptr)
  144. {
  145. tempNodePtr = nodePtr;
  146. nodePtr = nodePtr->left; // Reattach the left child
  147. delete tempNodePtr;
  148. }
  149. else if (nodePtr->left == nullptr)
  150. {
  151. tempNodePtr = nodePtr;
  152. nodePtr = nodePtr->right; // Reattach the right child
  153. delete tempNodePtr;
  154. }
  155. // If the node has two children.
  156. else
  157. {
  158. // Move one node the right.
  159. tempNodePtr = nodePtr->right;
  160. // Go to the end left node.
  161. while (tempNodePtr->left)
  162. tempNodePtr = tempNodePtr->left;
  163. // Reattach the left subtree.
  164. tempNodePtr->left = nodePtr->left;
  165. tempNodePtr = nodePtr;
  166. // Reattach the right subtree.
  167. nodePtr = nodePtr->right;
  168. delete tempNodePtr;
  169. }
  170. }
  171.  
  172. // Recursive node counting member function
  173. int IntBinaryTree::countNodesrecursive(TreeNode *root)
  174. {
  175. unsigned int count = 1;
  176. if (root->left != NULL)
  177. {
  178. count += countNodesrecursive(root->left);
  179. }
  180. if (root->right != NULL)
  181. {
  182. count += countNodesrecursive(root->right);
  183. }
  184. return count;
  185. }
  186. //countNode Member Function to check for root then calls the recursive counting function
  187. int IntBinaryTree::countNodes(IntBinaryTree *tree)
  188. {
  189. unsigned int count = 0;
  190. if (tree->root != NULL) {
  191. count = countNodesrecursive(tree->root);
  192. }
  193. return count;
  194. }
  195.  
  196.  
  197. //Display Traversal InOrder
  198. void IntBinaryTree::displayInOrder(TreeNode *nodePtr) const
  199. {
  200. if (nodePtr)
  201. {
  202. displayInOrder(nodePtr->left);
  203. cout << nodePtr->value << endl;
  204. displayInOrder(nodePtr->right);
  205. }
  206. }
  207.  
  208.  
  209. //Display Traversal PreOrder
  210. void IntBinaryTree::displayPreOrder(TreeNode *nodePtr) const
  211. {
  212. if (nodePtr)
  213. {
  214. cout << nodePtr->value << endl;
  215. displayPreOrder(nodePtr->left);
  216. displayPreOrder(nodePtr->right);
  217. }
  218. }
  219.  
  220. //Display Traversal PostOrder
  221. void IntBinaryTree::displayPostOrder(TreeNode *nodePtr) const
  222. {
  223. if (nodePtr)
  224. {
  225. displayPostOrder(nodePtr->left);
  226. displayPostOrder(nodePtr->right);
  227. cout << nodePtr->value << endl;
  228. }
  229. }
  230.  
  231. int main()
  232. {
  233. IntBinaryTree tree;
  234. tree.insertNode(5);
  235. tree.insertNode(8);
  236. tree.insertNode(3);
  237. tree.insertNode(12);
  238. tree.insertNode(19);
  239. tree.displayInOrder();
  240. system("pause");
  241. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement