Guest User

Untitled

a guest
Oct 23rd, 2017
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.00 KB | None | 0 0
  1. class btree
  2. {
  3. public:
  4. btree();
  5. ~btree();
  6. void print();
  7. void insert(int key, std::string data);
  8. void destroy_tree();
  9. private:
  10. void print(node *leaf);
  11. void destroy_tree(node *leaf);
  12. void insert(int key, std::string data, node *leaf);
  13.  
  14. node *root;
  15. };
  16.  
  17. struct node
  18. {
  19. int key_value; //глубина узла
  20. std::string data; //значение узла
  21. node* left; //левая ветка
  22. node* right; //правая ветка
  23. };
  24.  
  25. int main(void)
  26. {
  27. std::string str;
  28. std::string buff;
  29.  
  30. btree tree;
  31. std::vector<btree> woods;
  32.  
  33. unint i=0;
  34. unint n=0;
  35.  
  36. str="a(d(e)c(n))";
  37.  
  38. while(str[i])
  39. {
  40. if(str[i]!='(' && str[i]!=')' && str[i]!=',')
  41. buff+=str[i];
  42.  
  43. if(str[i]==',') //Встречаем ,
  44. {
  45. if(n==0) //Если уровень 0, то кладём дерево в массив и чистим нынешнее
  46. {
  47. woods.push_back(tree);
  48. tree.destroy_tree();
  49. }
  50. else //Отлично от нуля - разные узлы
  51. {
  52. tree.insert(n, buff);
  53. buff.clear();
  54. }
  55. }
  56.  
  57. switch (str[i])
  58. {
  59. case '(': //Встречаем ( - увеличиваем уровень на 1
  60. tree.insert(n, buff); // кладём буферную строку
  61. buff.clear(); //очищаем её
  62. n++;
  63. break;
  64. case ')': //Встречаем ) - уменьшаем уровень на 1
  65. tree.insert(n, buff); // кладём буферную строку
  66. buff.clear(); //очищаем её
  67. n--;
  68. break;
  69. }
  70. i++;
  71. }
  72. tree.print();
  73. }
  74.  
  75. woods.push_back(tree);//Добавили в вектор (скопировался root)
  76. tree.destroy_tree();//Следом уничтожили и в векторе теперь висячий указатель.
Add Comment
Please, Sign In to add comment