Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- template <typename T>
- class Tree
- {
- public:
- struct Node
- {
- T data;
- std::vector<Node*> children;
- Node(const T& value) : data(value) {}
- };
- public:
- //ima dinamichna pamet => 4ka
- Tree() : root(nullptr) {}
- Tree(const Tree<T>& copy)
- {
- copy(this->root, copy.root);
- }
- Tree<T>& operator=(const Tree<T>& obj)
- {
- if (this != &obj)
- {
- deleteTree(this->root);
- copy(this->root, obj.root);
- }
- return *this;
- }
- ~Tree()
- {
- deleteTree(this->root);
- }
- void setRoot(const T& value)
- {
- if (!this->root)
- {
- this->root = new Node(value);
- }
- else
- this->root->data = value;
- }
- void insertChild(const Tree<T> & child)
- {
- if (!child.root) return;
- Node* toChild = nullptr;
- copy(toChild, child.root);
- this->root->children.push_back(toChild);
- }
- void insert(const unsigned* route, size_t length, const T& elem)
- {
- insert(this->root, route, length, elem);
- }
- void insert(Node*& node, const unsigned* route, size_t length, const T& elem)
- {
- if (!node && length == 0)
- {
- node = new Node(elem);
- return;
- }
- if (length == 0)
- {
- Node* newElem = new Node(elem);
- node->children.push_back(newElem);
- return;
- }
- if (route[0] < this->node->children.size())
- {
- insert(node->children[route[0]], route + 1, length - 1, elem);
- }
- }
- private:
- Node* root;
- void copy(Node*& to, const Node* from)
- {
- if (from == nullptr) { to = nullptr; return; }
- to = new Node(from->data); //zaradi tva imame node*& to kato parametur za tva se slaga &
- for (const Node* child : from->children)
- {
- Node* toChild = nullptr;
- copy(toChild, child);
- to->children.push_back(toChild);
- }
- }
- void deleteTree(Node*& node)
- {
- if (node == nullptr) return;
- for (Node* child : node->children)
- {
- deleteTree(child);
- }
- delete node;
- node = nullptr;
- }
- };
- int main()
- {
- Tree<int> myTree;
- return 0;
- }
Add Comment
Please, Sign In to add comment