Advertisement
SilverTES

Data Structure Tree

Dec 15th, 2016
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.11 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. struct Node
  5. {
  6.     int deep;
  7.     std::string name;
  8.     Node* parent;
  9.     std::vector<Node*> branch;
  10.  
  11.     Node(Node* parent, std::string name)
  12.     {
  13.         this->parent = parent;
  14.         this->name = name;
  15.         if (parent != nullptr)
  16.             deep = parent->deep + 1;
  17.         else
  18.             deep = 0;
  19.     }
  20.     ~Node()
  21.     {
  22.         if (!branch.empty())
  23.         {
  24.             for (auto & it: branch)
  25.             {
  26.                 if (it != nullptr)
  27.                 {
  28.                     std::cout << "- Deleted : "<< it->name << "\n";
  29.                     delete it;
  30.                     it = nullptr;
  31.                 }
  32.             }
  33.             branch.clear();
  34.         }
  35.     }
  36.  
  37.     void append(Node* node)
  38.     {
  39.         this->branch.push_back(node);
  40.     }
  41. };
  42.  
  43. struct Tree
  44. {
  45.     Node* root;
  46.  
  47.     Tree()
  48.     {
  49.         root = new Node(nullptr,"ROOT");
  50.         std::cout << "- Tree created !\n";
  51.     }
  52.     ~Tree()
  53.     {
  54.         if (root != nullptr)
  55.             delete root;
  56.  
  57.         std::cout << "- Tree deleted !\n";
  58.     }
  59.  
  60.     void add(std::string name, Node* parent)
  61.     {
  62.         if (parent != nullptr)
  63.             parent->append(new Node(parent,name));
  64.         else
  65.             std::cout << "- Can't add child : " << name << " \n";
  66.     }
  67.  
  68.     Node * at(std::string name, Node* node = nullptr)
  69.     {
  70.         if (node == nullptr)
  71.             node = root;
  72.  
  73.         // Test if the current node is the wanted node !
  74.         if (node->name == name)
  75.         {
  76.             return node;
  77.             std::cout << " Found : "<< node->name << "\n";
  78.         }
  79.         // If not then iterate the branchs !
  80.         if (!node->branch.empty())
  81.         {
  82.             for (auto & it : node->branch)
  83.             {
  84.                 if (it != nullptr)
  85.                 {
  86.                     Node* res = at(name,it);
  87.                     if (res != nullptr)
  88.                         return res;
  89.                 }
  90.  
  91.             }
  92.         }
  93.         //std::cout << " Not found : "<< name << "\n";
  94.         return nullptr;
  95.     }
  96.  
  97. };
  98.  
  99. int showTree(Node* node)
  100. {
  101.     if (node == nullptr)
  102.         return 1;
  103.  
  104.     if (!node->branch.empty())
  105.     {
  106.         for (auto & it : node->branch)
  107.         {
  108.             for (int i(1); i<it->deep; i++)
  109.                 std::cout << "    ";
  110.             std::cout << "."<< it->name << "\n";
  111.             showTree(it);
  112.         }
  113.     }
  114.  
  115.     return 0;
  116. }
  117.  
  118. int main()
  119. {
  120.     Tree tree;
  121.  
  122.     tree.root->append(new Node(tree.root,"File"));
  123.     tree.add("Edit",tree.root);
  124.     tree.root->append(new Node(tree.root,"View"));
  125.  
  126.     tree.add("New",tree.at("File"));
  127.     tree.add("Open",tree.at("File"));
  128.     tree.add("Save",tree.at("File"));
  129.  
  130.     tree.add("Project",tree.at("Open"));
  131.     tree.add("Save_As",tree.at("Save"));
  132.  
  133.     tree.add("Project666",tree.at("Project",tree.root));
  134.  
  135.     tree.add("Copy",tree.at("Edit"));
  136.     tree.add("Paste",tree.at("Edit"));
  137.     tree.add("Undo",tree.at("Edit"));
  138.     tree.add("Redo",tree.at("Edit"));
  139.  
  140.     showTree(tree.root);
  141.  
  142.     showTree(tree.at("Open"));
  143.  
  144.     return 0;
  145. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement