fork download
  1. #include <iostream>
  2. #include <cstdlib>
  3.  
  4.  
  5. template<class T>
  6. class tree {
  7. struct node {
  8. T val;
  9. node* left;
  10. node* right;
  11. };
  12. private:
  13. node* tr;
  14. size_t cnt;
  15. public:
  16. tree(void):tr(NULL), cnt(0){}
  17. tree(const tree&);
  18. ~tree(){
  19. clear();
  20. }
  21. public:
  22.  
  23. //вставка
  24. bool insert(const T& val){
  25. node* p = tr, *i = tr;
  26. while(i != NULL){
  27. p = i;
  28. if(val < i->val)
  29. i = i->left;
  30. else if(val > i->val)
  31. i = i->right;
  32. else
  33. return false;
  34. }
  35.  
  36. node* n = new (std::nothrow) node();
  37. if(n != NULL){
  38. n->val = val;
  39. n->left = n->right = NULL;
  40.  
  41. if(p == NULL)
  42. tr = n;
  43. else if(val < p->val)
  44. p->left = n;
  45. else
  46. p->right = n;
  47. ++cnt;
  48. }
  49. return (n != NULL);
  50. }
  51.  
  52. //сумма элементов(метод, который выводит сумму узлов дерева)
  53. T get_sum(void) {
  54. return __sum(tr);
  55. }
  56.  
  57. //удаление всех
  58. void clear(void){
  59. __clear(tr);
  60. tr = NULL;
  61. cnt = 0;
  62. }
  63.  
  64. private:
  65.  
  66. T __sum(const node* p){
  67. if(p != NULL)
  68. return p->val + __sum(p->left) + __sum(p->right);
  69. return 0;
  70. }
  71.  
  72. void __clear(node* p){
  73. if(p != NULL){
  74. if(p->left != NULL)
  75. __clear(p->left);
  76. if(p->right != NULL)
  77. __clear(p->right);
  78. delete p;
  79. }
  80. }
  81.  
  82. size_t getSize(void) const { return cnt; }
  83. //...
  84. };
  85.  
  86.  
  87. int main(void){
  88. tree<size_t> tr;
  89. for(int i = 0; i < 30; ++i)
  90. tr.insert((size_t)(rand() % 40));
  91.  
  92. std::cout << "sum: " << tr.get_sum() << std::endl;
  93. tr.clear();
  94. return 0;
  95. }
  96.  
Success #stdin #stdout 0s 3460KB
stdin
Standard input is empty
stdout
sum: 371