Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- struct Node
- {
- int deep;
- std::string name;
- Node* parent;
- std::vector<Node*> branch;
- Node(Node* parent, std::string name)
- {
- this->parent = parent;
- this->name = name;
- if (parent != nullptr)
- deep = parent->deep + 1;
- else
- deep = 0;
- }
- ~Node()
- {
- if (!branch.empty())
- {
- for (auto & it: branch)
- {
- if (it != nullptr)
- {
- std::cout << "- Deleted : "<< it->name << "\n";
- delete it;
- it = nullptr;
- }
- }
- branch.clear();
- }
- }
- void append(Node* node)
- {
- this->branch.push_back(node);
- }
- };
- struct Tree
- {
- Node* root;
- Tree()
- {
- root = new Node(nullptr,"ROOT");
- std::cout << "- Tree created !\n";
- }
- ~Tree()
- {
- if (root != nullptr)
- delete root;
- std::cout << "- Tree deleted !\n";
- }
- void add(std::string name, Node* parent)
- {
- if (parent != nullptr)
- parent->append(new Node(parent,name));
- else
- std::cout << "- Can't add child : " << name << " \n";
- }
- Node * at(std::string name, Node* node = nullptr)
- {
- if (node == nullptr)
- node = root;
- // Test if the current node is the wanted node !
- if (node->name == name)
- {
- return node;
- std::cout << " Found : "<< node->name << "\n";
- }
- // If not then iterate the branchs !
- if (!node->branch.empty())
- {
- for (auto & it : node->branch)
- {
- if (it != nullptr)
- {
- Node* res = at(name,it);
- if (res != nullptr)
- return res;
- }
- }
- }
- //std::cout << " Not found : "<< name << "\n";
- return nullptr;
- }
- };
- int showTree(Node* node)
- {
- if (node == nullptr)
- return 1;
- if (!node->branch.empty())
- {
- for (auto & it : node->branch)
- {
- for (int i(1); i<it->deep; i++)
- std::cout << " ";
- std::cout << "."<< it->name << "\n";
- showTree(it);
- }
- }
- return 0;
- }
- int main()
- {
- Tree tree;
- tree.root->append(new Node(tree.root,"File"));
- tree.add("Edit",tree.root);
- tree.root->append(new Node(tree.root,"View"));
- tree.add("New",tree.at("File"));
- tree.add("Open",tree.at("File"));
- tree.add("Save",tree.at("File"));
- tree.add("Project",tree.at("Open"));
- tree.add("Save_As",tree.at("Save"));
- tree.add("Project666",tree.at("Project",tree.root));
- tree.add("Copy",tree.at("Edit"));
- tree.add("Paste",tree.at("Edit"));
- tree.add("Undo",tree.at("Edit"));
- tree.add("Redo",tree.at("Edit"));
- showTree(tree.root);
- showTree(tree.at("Open"));
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement