fork(3) download
  1. #include <iostream>
  2.  
  3. class BST{
  4. private:
  5. class node{
  6. public:
  7. char data;
  8. node *left;
  9. node *right;
  10.  
  11. node(char ch) : data(ch), left(nullptr), right(nullptr) {}
  12. };
  13. node *root;//pointer to the root
  14.  
  15. static void visit_inorder(const node*, void(*)(char)) ;
  16. static void insert(node*&n, char data);
  17.  
  18. public:
  19. BST() : root(nullptr) {}
  20.  
  21. void insert(char data);
  22.  
  23. // call a function for each element.
  24. void visit_inorder(void(*f)(char)) const { visit_inorder(root, f); }
  25. };
  26.  
  27. void BST::insert(BST::node*& n, char data)
  28. {
  29. if (data < n->data)
  30. {
  31. if (n->left)
  32. insert(n->left, data);
  33. else
  34. n->left = new node(data);
  35. }
  36. else if (data > n->data)
  37. {
  38. if (n->right)
  39. insert(n->right, data);
  40. else
  41. n->right = new node(data);
  42. }
  43. }
  44.  
  45. void BST::insert(char data)
  46. {
  47. if (root == nullptr)
  48. root = new node(data);
  49. else
  50. insert(root, data);
  51. }
  52.  
  53. void BST::visit_inorder(const BST::node* n, void(*func)(char))
  54. {
  55. if (!n)
  56. return;
  57.  
  58. visit_inorder(n->left, func);
  59. func(n->data);
  60. visit_inorder(n->right, func);
  61. }
  62.  
  63. void print_element(char element)
  64. {
  65. std::cout << element << '\n';
  66. }
  67.  
  68. int main()
  69. {
  70. BST bst;
  71. bst.insert('P');
  72. bst.insert('B');
  73. bst.insert('Z');
  74. bst.insert('R');
  75. bst.insert('C');
  76.  
  77. bst.visit_inorder(print_element);
  78. }
  79.  
Success #stdin #stdout 0s 3428KB
stdin
Standard input is empty
stdout
B
C
P
R
Z