Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class btree
- {
- public:
- btree();
- ~btree();
- void print();
- void insert(int key, std::string data);
- void destroy_tree();
- private:
- void print(node *leaf);
- void destroy_tree(node *leaf);
- void insert(int key, std::string data, node *leaf);
- node *root;
- };
- struct node
- {
- int key_value; //глубина узла
- std::string data; //значение узла
- node* left; //левая ветка
- node* right; //правая ветка
- };
- int main(void)
- {
- std::string str;
- std::string buff;
- btree tree;
- std::vector<btree> woods;
- unint i=0;
- unint n=0;
- str="a(d(e)c(n))";
- while(str[i])
- {
- if(str[i]!='(' && str[i]!=')' && str[i]!=',')
- buff+=str[i];
- if(str[i]==',') //Встречаем ,
- {
- if(n==0) //Если уровень 0, то кладём дерево в массив и чистим нынешнее
- {
- woods.push_back(tree);
- tree.destroy_tree();
- }
- else //Отлично от нуля - разные узлы
- {
- tree.insert(n, buff);
- buff.clear();
- }
- }
- switch (str[i])
- {
- case '(': //Встречаем ( - увеличиваем уровень на 1
- tree.insert(n, buff); // кладём буферную строку
- buff.clear(); //очищаем её
- n++;
- break;
- case ')': //Встречаем ) - уменьшаем уровень на 1
- tree.insert(n, buff); // кладём буферную строку
- buff.clear(); //очищаем её
- n--;
- break;
- }
- i++;
- }
- tree.print();
- }
- woods.push_back(tree);//Добавили в вектор (скопировался root)
- tree.destroy_tree();//Следом уничтожили и в векторе теперь висячий указатель.
Add Comment
Please, Sign In to add comment