Advertisement
Finnit

Trie tree

Sep 12th, 2016
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.34 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. #define N (1 << (sizeof(char)*8))
  4.  
  5. using namespace std;
  6.  
  7. string to_string(int i) {
  8.         ostringstream res;
  9.         res << i;
  10.         return res.str();
  11. }
  12.  
  13. template <class T> class TreeNode {
  14.         T *item = NULL;
  15.         TreeNode<T> *children[N];
  16.  
  17.         static TreeNode *insert(TreeNode<T> *node, string name, int i, T *item) {
  18.                 if(name[i] == '\0') {
  19.                         if(node == NULL)
  20.                                 node = new TreeNode<T>(item);
  21.                         else
  22.                                 node->item = item;
  23.                         return node;
  24.                 }
  25.                 if(node == NULL)
  26.                         node = new TreeNode<T>();
  27.  
  28.                 node->children[name[i]] = insert(node->children[name[i]],name,i+1,item);
  29.                 return node;
  30.         }
  31.         static T *search(TreeNode<T> *node, string name, int i) {
  32.                 if(node->item == NULL)
  33.                         return NULL;
  34.                 if(name[i] == '\0')
  35.                         return node->item;
  36.                 return search(node->children[name[i]],name,i+1);
  37.         }
  38.         static void print(TreeNode<T> *node) {
  39.                 if(node == NULL)
  40.                         return;
  41.                 cout << '(';
  42.                 if(node->item != NULL) {
  43.                         cout << '[' << *(node->item) << ']';
  44.                 }
  45.                 for(int i = 0; i < N-1; ++i) {
  46.                         print(node->children[i]);
  47.                 }
  48.                 print(node->children[N-1]);
  49.                 cout << ')';
  50.         }
  51. public:
  52.         TreeNode() {
  53.                 for(int i = 0; i < N; ++i)
  54.                         children[i] = NULL;
  55.         }
  56.         TreeNode(T *item) {
  57.                 *this = TreeNode();
  58.                 this->item = item;
  59.         }
  60.         void insert(T *item) {
  61.                 *this = *insert(this,to_string(*item),0,item);
  62.         }
  63.         T *search(string name) {
  64.                 return search(this,name,0);
  65.         }
  66.         void print(void) {
  67.                 print(this);
  68.                 cout << endl;
  69.         }
  70. };
  71.  
  72. int main(void) {
  73.         TreeNode<int> root = NULL;
  74.         root.insert(new int(1));
  75.         root.insert(new int(2));
  76.         root.insert(new int(3));
  77.         root.print();
  78.         return 0;
  79. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement