Guest User

Untitled

a guest
Jan 23rd, 2018
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.04 KB | None | 0 0
  1. /////////////////////////////////////////////////// /  /   /    /     /    /
  2. ////////////////////////UNIVERSAL INFINITREE///// /  /   /    /     /     /
  3. /////////////////////////////////////////////// /  /   /    /     /      /
  4. ///////////////////////////Written by://///// /  /   /    /     /      /  
  5. //////////////////////////-wav_syntax-///// /  /   /    /     /      /    
  6. ///////////////////////////////////////// /  /   /    /     /      /       /
  7.  
  8. /*
  9. This is a bi-directional variable-node tree that can store any variable type needed.
  10. It stores the memory necessary to add one or more nodes to each branch.
  11. It rounds the addition of new nodes up to the first NULL node found in the collection,
  12.    it searches the collection starting from the root node and down to the furthest level in left to right order.
  13. */
  14.  
  15. #include <iostream>
  16.  
  17. using namespace std;
  18.  
  19.  
  20. template <class Type>
  21. typedef struct TREE_NODE{
  22. int dims;
  23. TREE_NODE<Type>* parent;
  24. TREE_NODE<Type>* node;
  25. Type value;
  26. };
  27.  
  28. template <class Type>
  29. typedef struct TREE{
  30. int dims;
  31. TREE_NODE<Type>*  node;
  32. };
  33.  
  34. //Initialize a tree so it is ready to use
  35. template <class Type>
  36. TREE<Type>* InitializeTree(TREE<Type>* Tree,int dimensions){
  37. Tree=new TREE<Type>;
  38. Tree->node=new TREE_NODE<Type>[dimensions];
  39. Tree->node->dims=dimensions;
  40. Tree->dims=dimensions;
  41.     for(int i=0;i<Tree->dims;i++){
  42.     Tree->node[i].parent=NULL;
  43.     Tree->node[i].node=NULL;
  44.     }
  45. return Tree;
  46. }
  47.  
  48.  
  49. //Add a node to the tree of dimensions indices, the last argument can be omitted as it
  50. // is used internally, but it could also be used to assign nodes to a specific node pointer
  51. template <class Type>
  52. TREE_NODE<Type>* AddNodeToTree(TREE<Type>*tree,
  53.                                int dimensions,
  54.                                TREE_NODE<Type>*frontier=NULL){
  55. int fdims;
  56.                 if(fron==NULL){
  57.             frontier=tree->node;
  58.                 fdims=tree->dims;
  59.             }
  60.             else{
  61.             fdims=frontier->parent->dims;
  62.             }
  63.    
  64.         for(int i=0;i<fdims;i++){          
  65.                     if(frontier[i].node==NULL){            
  66.                 frontier[i].node=new TREE_NODE<Type>[dimensions];
  67.                        for(int k=0;k<dimensions;k++){
  68.                frontier[i].node[k].dims=0;
  69.                frontier[i].node[k].parent=NULL;
  70.                frontier[i].node[k].node=NULL;
  71.                }
  72.             frontier[i].node->parent=fron;
  73.             frontier[i].dims=dimensions;
  74.                 return NULL;
  75.             }
  76.         }
  77. return AddNodeToTree(tree,dimensions,frontier->node);
  78. }
  79.  
  80.  
  81.  
  82. int main(){
  83. TREE<int>* Tree=InitializeTree(Tree,2);     //(tree,numberOfInitialDimensionsForRootNode).
  84. AddNodeToTree(Tree,3);                      //(tree,numberOfDimensions)                    
  85. AddNodeToTree(Tree,4);
  86. AddNodeToTree(Tree,5);
  87. AddNodeToTree(Tree,6);
  88.                                            
  89. cout<<endl;
  90.  
  91. Tree->node[0].value=0;                      //The root is initialized with 2 nodes
  92. Tree->node[1].value=1;
  93.  
  94. Tree->node[0].node[0].value=100;            //Root node 0 given 3 nodes
  95. Tree->node[0].node[1].value=101;
  96. Tree->node[0].node[2].value=102;
  97.  
  98. Tree->node[1].node[0].value=100;            //Root node 1 given 4 nodes
  99. Tree->node[1].node[1].value=101;
  100. Tree->node[1].node[2].value=102;
  101. Tree->node[1].node[3].value=102;
  102.  
  103. Tree->node[0].node[0].node[0].value=1000;   //Child node 0 of root node 0 given 5 nodes
  104. Tree->node[0].node[0].node[1].value=1001;
  105. Tree->node[0].node[0].node[2].value=1002;
  106. Tree->node[0].node[0].node[3].value=1003;
  107. Tree->node[0].node[0].node[4].value=1004;
  108.  
  109. Tree->node[0].node[1].node[0].value=1000;   //Child node 1 of root node 0 given 6 nodes
  110. Tree->node[0].node[1].node[1].value=1001;
  111. Tree->node[0].node[1].node[2].value=1002;
  112. Tree->node[0].node[1].node[3].value=1003;
  113. Tree->node[0].node[1].node[4].value=1004;
  114. Tree->node[0].node[1].node[5].value=1005;
  115.  
  116. /*               ///////Confused? Here's the tree version\\\\\\\\        
  117. |                                                         |
  118. |                                                         |
  119. |                                     Root                                |
  120. |                  First child-------|    |------Second child             |                          
  121. |                 /     |     \                 /    |    |   \           |
  122. |              |||||  |||||| NULL             NULL  NULL NULL NULL        |
  123. |            4 chlrn 5 cldrn                                      |
  124. */
  125.  
  126. cout<<"FIN!"<<endl;                         //All finished building the tree and setting values at this point, lets get the dimensions of each brach added to the tree
  127.  
  128. TREE_NODE<int>* node=Tree->list;
  129.                                                                        //Output:
  130. cout<<"ROOT DIMENSIONS: "<<Tree->dims<<endl;                           //2
  131. cout<<" FIRST CHILD DIMENSIONS: "<<node[0].dims<<endl;                 //3
  132. cout<<"  FIRST FIRST CHILD DIMENSIONS: "<<node[0].node[0].dims<<endl;  //5
  133. cout<<"  FIRST SECOND CHILD DIMENSIONS: "<<node[0].node[1].dims<<endl; //6
  134. cout<<" SECOND CHILD DIMENSIONS: "<<node[1].dims<<endl;                //4
  135. return 0;
  136. }
Add Comment
Please, Sign In to add comment