Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define N (1 << (sizeof(char)*8))
- using namespace std;
- string to_string(int i) {
- ostringstream res;
- res << i;
- return res.str();
- }
- template <class T> class TreeNode {
- T *item = NULL;
- TreeNode<T> *children[N];
- static TreeNode *insert(TreeNode<T> *node, string name, int i, T *item) {
- if(name[i] == '\0') {
- if(node == NULL)
- node = new TreeNode<T>(item);
- else
- node->item = item;
- return node;
- }
- if(node == NULL)
- node = new TreeNode<T>();
- node->children[name[i]] = insert(node->children[name[i]],name,i+1,item);
- return node;
- }
- static T *search(TreeNode<T> *node, string name, int i) {
- if(node->item == NULL)
- return NULL;
- if(name[i] == '\0')
- return node->item;
- return search(node->children[name[i]],name,i+1);
- }
- static void print(TreeNode<T> *node) {
- if(node == NULL)
- return;
- cout << '(';
- if(node->item != NULL) {
- cout << '[' << *(node->item) << ']';
- }
- for(int i = 0; i < N-1; ++i) {
- print(node->children[i]);
- }
- print(node->children[N-1]);
- cout << ')';
- }
- public:
- TreeNode() {
- for(int i = 0; i < N; ++i)
- children[i] = NULL;
- }
- TreeNode(T *item) {
- *this = TreeNode();
- this->item = item;
- }
- void insert(T *item) {
- *this = *insert(this,to_string(*item),0,item);
- }
- T *search(string name) {
- return search(this,name,0);
- }
- void print(void) {
- print(this);
- cout << endl;
- }
- };
- int main(void) {
- TreeNode<int> root = NULL;
- root.insert(new int(1));
- root.insert(new int(2));
- root.insert(new int(3));
- root.print();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement