Guest User

Untitled

a guest
Dec 18th, 2018
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.97 KB | None | 0 0
  1. /*Richard-David Simmons
  2. CS246 "Node Class" */
  3. #include <iostream>
  4. using namespace std;
  5.  
  6. // Node class
  7. class Node {
  8. int key;
  9. Node* left;
  10. Node* right;
  11. public:
  12. Node() { key=-1; left=NULL; right=NULL; };
  13. void setKey(int aKey) { key = aKey; };
  14. void setLeft(Node* aLeft) { left = aLeft; };
  15. void setRight(Node* aRight) { right = aRight; };
  16. int Key() { return key; };
  17. Node* Left() { return left; };
  18. Node* Right() { return right; };
  19. };
  20.  
  21. // Tree class
  22. class Tree {
  23. Node* root;
  24. public:
  25. Tree();
  26. ~Tree();
  27. Node* Root() { return root; };
  28. void addNode(int key);
  29. void inOrder(Node* n);
  30. void preOrder(Node* n);
  31. void postOrder(Node* n);
  32. private:
  33. void addNode(int key, Node* leaf);
  34. void freeNode(Node* leaf);
  35. };
  36.  
  37. // Constructor
  38. Tree::Tree() {
  39. root = NULL;
  40. }
  41.  
  42. // Destructor
  43. Tree::~Tree() {
  44. freeNode(root);
  45. }
  46.  
  47. // Free the node
  48. void Tree::freeNode(Node* leaf)
  49. {
  50. if ( leaf != NULL )
  51. {
  52. freeNode(leaf->Left());
  53. freeNode(leaf->Right());
  54. delete leaf;
  55. }
  56. }
  57.  
  58. // Add a node
  59. void Tree::addNode(int key) {
  60. // No elements. Add the root
  61. if ( root == NULL ) {
  62. cout << "add root node ... " << key << endl;
  63. Node* n = new Node();
  64. n->setKey(key);
  65. root = n;
  66. }
  67. else {
  68. cout << "add other node ... " << key << endl;
  69. addNode(key, root);
  70. }
  71. }
  72.  
  73. // Add a node (private)
  74. void Tree::addNode(int key, Node* leaf) {
  75. if ( key <= leaf->Key() ) {
  76. if ( leaf->Left() != NULL )
  77. addNode(key, leaf->Left());
  78. else {
  79. Node* n = new Node();
  80. n->setKey(key);
  81. leaf->setLeft(n);
  82. }
  83. }
  84. else {
  85. if ( leaf->Right() != NULL )
  86. addNode(key, leaf->Right());
  87. else {
  88. Node* n = new Node();
  89. n->setKey(key);
  90. leaf->setRight(n);
  91. }
  92. }
  93. }
  94.  
  95. // Print the tree in-order
  96. // Traverse the left sub-tree, root, right sub-tree
  97. void Tree::inOrder(Node* n) {
  98. if ( n ) {
  99. inOrder(n->Left());
  100. cout << n->Key() << " ";
  101. inOrder(n->Right());
  102. }
  103. }
  104.  
  105. // Print the tree pre-order
  106. // Traverse the root, left sub-tree, right sub-tree
  107. void Tree::preOrder(Node* n) {
  108. if ( n ) {
  109. cout << n->Key() << " ";
  110. preOrder(n->Left());
  111. preOrder(n->Right());
  112. }
  113. }
  114.  
  115. // Print the tree post-order
  116. // Traverse left sub-tree, right sub-tree, root
  117. void Tree::postOrder(Node* n) {
  118. if ( n ) {
  119. postOrder(n->Left());
  120. postOrder(n->Right());
  121. cout << n->Key() << " ";
  122. }
  123. }
  124.  
  125.  
  126. // Test main program
  127. int main() {
  128. Tree* tree = new Tree();
  129. tree->addNode(30);
  130. tree->addNode(10);
  131. tree->addNode(20);
  132. tree->addNode(40);
  133. tree->addNode(50);
  134.  
  135. cout << "In order traversal" << endl;
  136. tree->inOrder(tree->Root());
  137. cout << endl;
  138.  
  139. cout << "Pre order traversal" << endl;
  140. tree->preOrder(tree->Root());
  141. cout << endl;
  142.  
  143. cout << "Post order traversal" << endl;
  144. tree->postOrder(tree->Root());
  145. cout << endl;
  146.  
  147. delete tree;
  148. return 0;
  149. }
Add Comment
Please, Sign In to add comment