fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. template <typename T>
  5. struct NodeStruct
  6. {
  7. T keyValue; //value to stored that is being searched for in our tree
  8. NodeStruct<T> *left; //left side of pointing tree from parent node
  9. NodeStruct<T> *right; //right side of pointing tree from parent node
  10. };
  11.  
  12. template <class T>
  13. class Tree
  14. {
  15. public:
  16. typedef NodeStruct<T> node;
  17. Tree() { root = NULL; } //constructor
  18. ~Tree() {} //destructor
  19.  
  20. void displayTree();
  21. void insertTree(T key);
  22. node *searchTree(T key);
  23. void deleteTree();
  24.  
  25. private:
  26. node *root; //points to the root point of our tree
  27. void displayTree(node *leaf);
  28. void insertTree(T key, node *leaf); //takes in our keyValue to
  29. void deleteTree(node*leaf);
  30. node *search(T key, node *leaf);
  31. };
  32.  
  33. template <class T>
  34. void Tree<T>::insertTree(T key)
  35. {
  36. cout << "instert1" << endl;
  37. if(root != NULL)
  38. {
  39. cout << "instert2" << endl;
  40. insertTree(key, root);
  41. }
  42. else
  43. {
  44. cout << "inster else..." << endl;
  45. root = new node;
  46. root->keyValue = key;
  47. cout << root->keyValue << "--root key value" << endl;
  48. root->left = NULL;
  49. root->right = NULL;
  50. }
  51.  
  52. }
  53.  
  54. template <class T>
  55. void Tree<T>::insertTree(T key, node *leaf)
  56. {
  57. if(key < leaf->keyValue)
  58. {
  59. if(leaf->left != NULL)
  60. {
  61. insertTree(key, leaf->left);
  62. }
  63. else //descend tree to find appropriate NULL node to store keyValue (left side of tree)
  64. {
  65.  
  66. leaf->left = new node; //Creating new node to store our keyValue (data)
  67. leaf->left -> keyValue = key;
  68. leaf->left -> left = NULL; //Assigning left and right child of current child node to NULL
  69. leaf->left -> right = NULL;
  70. }
  71. }
  72. else if(key >= leaf->keyValue)
  73. {
  74. if(leaf->right != NULL)
  75. {
  76. insertTree(key, leaf->right);
  77. }
  78. else //descend tree to find appropriate NULL node to store keyValue (right side of tree)
  79. {
  80. leaf->right = new node; //Creating new node to store our keyValue (data)
  81. leaf->right -> keyValue = key;
  82. leaf->right -> right = NULL; //Assigning left and right child of current child node to NULL
  83. leaf->right -> left = NULL;
  84. }
  85. }
  86. }
  87.  
  88. template <class T>
  89. typename Tree<T>::node *Tree<T>::searchTree(T key)
  90. {
  91. cout << "searching for...key: " << key << " and given root value:" << endl;
  92. return search(key, root);
  93. }
  94. template <class T>
  95. typename Tree<T>::node *Tree<T>::search(T key, node*leaf)
  96. {
  97. if(leaf != NULL)
  98. {
  99. cout << "check passed for search!" << endl;
  100. if(key == leaf->keyValue)
  101. {
  102. return leaf;
  103. }
  104. if(key < leaf->keyValue)
  105. {
  106. return search(key, leaf->left);
  107. }
  108. else
  109. {
  110. return search(key, leaf->right);
  111. }
  112.  
  113. }
  114.  
  115. else
  116. {
  117. cout << key << " Not found...!" << endl;
  118. return NULL;
  119. }
  120. }
  121.  
  122. int main(void)
  123. {
  124. Tree<std::string> tree;
  125. tree.insertTree(std::string("Hello"));
  126. tree.insertTree(std::string("World"));
  127.  
  128. typename Tree<std::string>::node* node = tree.searchTree("World");
  129.  
  130. cout << node << endl;
  131.  
  132. return 0;
  133. }
Success #stdin #stdout 0s 3432KB
stdin
Standard input is empty
stdout
instert1
inster else...
Hello--root key value
instert1
instert2
searching for...key: World and given root value:
check passed for search!
check passed for search!
0x9837048