Guest User

Untitled

a guest
Jan 23rd, 2018
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.12 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 is used internally, but it could also be used to assign nodes to a specific node pointer
  50. template <class Type>
  51. TREE_NODE<Type>* AddNodeToTree(TREE<Type>* tree,int dimensions,TREE_NODE<Type>* frontier=NULL){
  52. int fdims;
  53.             if(fron==NULL){
  54.             frontier=tree->node;
  55.             fdims=tree->dims;
  56.             }
  57.             else{
  58.             fdims=frontier->parent->dims;
  59.             }
  60.    
  61.             for(int i=0;i<fdims;i++){          
  62.                if(frontier[i].node==NULL){            
  63.                 frontier[i].node=new TREE_NODE<Type>[dimensions];
  64.                     for(int k=0;k<dimensions;k++){
  65.                     frontier[i].node[k].dims=0;
  66.                     frontier[i].node[k].parent=NULL;
  67.                     frontier[i].node[k].node=NULL;
  68.                     }
  69.                 frontier[i].node->parent=fron;
  70.                 frontier[i].dims=dimensions;
  71.                 return NULL;
  72.                 }
  73.             }
  74. return AddNodeToTree(tree,dimensions,frontier->node);
  75. }
  76.  
  77.  
  78.  
  79. int main(){
  80. TREE<int>* Tree=InitializeTree(Tree,2);     //(tree,numberOfInitialDimensionsForRootNode).
  81. AddNodeToTree(Tree,3);                      //(tree,numberOfDimensions)                    
  82. AddNodeToTree(Tree,4);
  83. AddNodeToTree(Tree,5);
  84. AddNodeToTree(Tree,6);
  85.                                            
  86. cout<<endl;
  87.  
  88. Tree->node[0].value=0;                      //The root is initialized with 2 nodes
  89. Tree->node[1].value=1;
  90.  
  91. Tree->node[0].node[0].value=100;            //Root node 0 given 3 nodes
  92. Tree->node[0].node[1].value=101;
  93. Tree->node[0].node[2].value=102;
  94.  
  95. Tree->node[1].node[0].value=100;            //Root node 1 given 4 nodes
  96. Tree->node[1].node[1].value=101;
  97. Tree->node[1].node[2].value=102;
  98. Tree->node[1].node[3].value=102;
  99.  
  100. Tree->node[0].node[0].node[0].value=1000;   //Child node 0 of root node 0 given 5 nodes
  101. Tree->node[0].node[0].node[1].value=1001;
  102. Tree->node[0].node[0].node[2].value=1002;
  103. Tree->node[0].node[0].node[3].value=1003;
  104. Tree->node[0].node[0].node[4].value=1004;
  105.  
  106. Tree->node[0].node[1].node[0].value=1000;   //Child node 1 of root node 0 given 6 nodes
  107. Tree->node[0].node[1].node[1].value=1001;
  108. Tree->node[0].node[1].node[2].value=1002;
  109. Tree->node[0].node[1].node[3].value=1003;
  110. Tree->node[0].node[1].node[4].value=1004;
  111. Tree->node[0].node[1].node[5].value=1005;
  112.                                             /*               ///////Confused? Here's the tree version\\\\\\\\        
  113.                                             |                                                                         |
  114.                                             |                                                                         |
  115.                                             |                                     Root                                |
  116.                                             |                  First child-------|    |------Second child             |                          
  117.                                             |                 /     |     \                 /    |    |   \           |
  118.                                             |              |||||  |||||| NULL             NULL  NULL NULL NULL        |
  119.                                             |            4 chlrn 5 cldrn                                              |
  120.                                             */
  121. 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
  122.  
  123. TREE_NODE<int>* node=Tree->list;
  124.                                                                        //Output:
  125. cout<<"ROOT DIMENSIONS: "<<Tree->dims<<endl;                           //2
  126. cout<<" FIRST CHILD DIMENSIONS: "<<node[0].dims<<endl;                 //3
  127. cout<<"  FIRST FIRST CHILD DIMENSIONS: "<<node[0].node[0].dims<<endl;  //5
  128. cout<<"  FIRST SECOND CHILD DIMENSIONS: "<<node[0].node[1].dims<<endl; //6
  129. cout<<" SECOND CHILD DIMENSIONS: "<<node[1].dims<<endl;                //4
  130. return 0;
  131. }
Add Comment
Please, Sign In to add comment