meissner61

binary Tree bugs!

Jun 21st, 2011
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.16 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <fstream>
  4. #include <stdlib.h>
  5.  
  6. using namespace std;
  7.  
  8. struct _node
  9. {
  10.     int value;
  11.     _node* parent;
  12.  
  13.     _node* leftChild;
  14.     _node* rightChild;
  15.  
  16. };
  17.  
  18. typedef struct _node node;  //redeffinition of struct _node
  19.  
  20. struct _tree
  21. {
  22.     int nodeCount;
  23.     node* root;
  24.  
  25. };
  26.  
  27. typedef struct  _tree tree;
  28.  
  29. void printTree(tree* t);
  30.  
  31. tree* createNewTree();
  32.  
  33.  
  34. node* createNode(int i);
  35.  
  36. void deleteTree(tree * t);
  37.  
  38. void deleteHelper(node* n);
  39.  
  40. void addNodeToBottom(tree* t, node* n);
  41.  
  42. void addNodeToTop(tree* t, node* n);
  43.  
  44. void deleteFromTop(tree* t);
  45.  
  46. void deleteFromBottom(tree* t);
  47.  
  48. int addSum(tree* t);
  49.  
  50. void sortTree(tree* t);
  51.  
  52. void sortTree(tree* t)
  53. {
  54.  
  55. }
  56.  
  57.  
  58.  
  59.  
  60.  
  61. void addNodeToBottom(tree* t, node* n)
  62. {
  63.     if(t==NULL)
  64.     {
  65.         cout<<"No tree!";
  66.         return;
  67.     }
  68.  
  69.     if(t->nodeCount==0)
  70.     {
  71.         t->root = n;
  72.         t->nodeCount++;
  73.  
  74.         return;
  75.     }
  76.  
  77.     node* treeArray[20];
  78.  
  79.     treeArray[0] = t->root;
  80.  
  81.     node* futureParent = NULL;
  82.  
  83.     for(int i=0; i<t->nodeCount;i++)
  84.     {
  85.         if(treeArray[i]->leftChild==NULL)
  86.         {
  87.             futureParent = treeArray[i];
  88.             break;
  89.         }
  90.  
  91.         else if(treeArray[i]->rightChild==NULL)
  92.         {
  93.             futureParent = treeArray[i];
  94.             break;
  95.         }
  96.  
  97.         treeArray[2*i+1] = (node*)(treeArray[i]->leftChild);
  98.  
  99.         treeArray[2*i+2] = treeArray[i]->rightChild;
  100.  
  101.  
  102.     }
  103.  
  104.     if(futureParent==NULL)
  105.     {
  106.         cout<<"Error!";
  107.         return;
  108.     }
  109.  
  110.     if(futureParent->leftChild==NULL)
  111.     {
  112.         futureParent->leftChild = n;
  113.         n->parent = futureParent;
  114.  
  115.         t->nodeCount++;
  116.     }
  117.  
  118.     else
  119.     {
  120.         futureParent->rightChild = n;
  121.         n->parent = futureParent;
  122.         t->nodeCount++;
  123.     }
  124.  
  125. }
  126.  
  127. void addNodeToTop(tree* t, node* n)
  128. {
  129.     if(t->nodeCount == 0)
  130.     {
  131.         t->root = n;
  132.         t->nodeCount++;
  133.  
  134.         return;
  135.     }
  136.  
  137.     n->leftChild = t->root;
  138.  
  139.     n->rightChild = t->root->rightChild;
  140.  
  141.     if(t->root->rightChild!=NULL)
  142.         t->root->rightChild->parent=n;
  143.  
  144.  
  145.     t->root->rightChild=NULL;
  146.  
  147.     t->root->parent = n;
  148.  
  149.     t->root=n;
  150.  
  151.  
  152. }
  153.  
  154. void deleteFromTop(tree* t) //crazy
  155. {
  156.  
  157. }
  158.  
  159. void deleteFromBottom(tree* t)
  160. {
  161.     //find lucky parent
  162.     //delete child, set pointer
  163. }
  164.  
  165. int addSum(tree* t)
  166. {
  167.     return 0;
  168. }
  169.  
  170.  
  171.  
  172.  
  173.  
  174. tree* createNewTree()
  175. {
  176.     tree* newTree = new tree[1];
  177.     if (newTree == NULL)
  178.     {
  179.         cout<<"ERror #2";
  180.  
  181.         exit(-1);
  182.     }
  183.     newTree->nodeCount=0;
  184.     newTree->root=NULL;
  185.  
  186.     return newTree;
  187.  
  188. }
  189.  
  190. node* createNode(int i)
  191. {
  192.     node* newNode = new node[1];
  193.  
  194.     if(newNode == NULL)
  195.     {
  196.         cout<<"Error #2";
  197.  
  198.         exit(-1);
  199.     }
  200.  
  201.     newNode->parent=NULL;
  202.     newNode->leftChild=NULL;
  203.     newNode->rightChild=NULL;
  204.     newNode->value = i;
  205.  
  206.     return newNode;
  207.  
  208. }
  209.  
  210. void deleteTree(tree* t)
  211. {
  212.     deleteHelper(t->root);
  213.  
  214.     delete (t);
  215.  
  216.     t=NULL;
  217. }
  218.  
  219.  
  220. void deleteHelper(node* n)
  221. {
  222.     if(n==NULL)
  223.         return;
  224.  
  225.     if(n->leftChild)
  226.         deleteHelper(n->leftChild);
  227.  
  228.     if(n->rightChild)
  229.         deleteHelper(n->rightChild);
  230.  
  231.  
  232.     delete (n);
  233.     n=NULL;
  234. }
  235.  
  236.  
  237. void printTree(tree* t)
  238. {
  239.     if(t==NULL)
  240.     {
  241.         cout<<"No tree!";
  242.         return;
  243.     }
  244.  
  245.     if(t->nodeCount==0)
  246.     {
  247.         cout<<"No nodes!";
  248.         return;
  249.     }
  250.  
  251.     node* treeArray[20];
  252.  
  253.     treeArray[0] = t->root;
  254.  
  255.  
  256.     for(int i=0; i<t->nodeCount;i++)
  257.     {
  258.         if(treeArray[i]->leftChild==NULL)
  259.         {
  260.             break;
  261.         }
  262.  
  263.         else if(treeArray[i]->rightChild==NULL)
  264.         {
  265.             break;
  266.         }
  267.  
  268.         treeArray[2*i+1] = treeArray[i]->leftChild;
  269.  
  270.         treeArray[2*i+2] = treeArray[i]->rightChild;
  271.  
  272.  
  273.     }
  274.  
  275.     int line = 0;//printed numbers
  276.  
  277.     int lineLength = 1;
  278.  
  279.     for(int i=0; i<t->nodeCount;i++)
  280.     {
  281.         cout<<treeArray[i]->value<<" ";
  282.         line++;
  283.  
  284.         if(line==lineLength)
  285.         {
  286.             cout<<"\n";
  287.             line = 0;
  288.             lineLength*=2;
  289.  
  290.         }
  291.     }
  292. }
  293.  
  294. int main()
  295. {
  296.     node* newNode;
  297.     int choice= 999;
  298.     tree* myTree=NULL;
  299.     int ivalue=0;
  300.  
  301.  
  302.  
  303.  
  304.     while(choice!= 0)
  305.     {
  306.  
  307.         cout<<"Choose what you want!: "<<endl;
  308.         cout<<"\t 0. Press 0 to exit."<<endl;
  309.         cout<<"\t 1. CreateTree."<<endl;
  310.         cout<<"\t 2. add node to tree top."<<endl;
  311.         cout<<"\t 3. add node to tree bottom."<<endl;
  312.         cout<<"\t 4. print Tree."<<endl;
  313.         cout<<"\t 5. delete from tree bottom."<<endl;
  314.         cout<<"\t 6. delete from tree top."<<endl;
  315.         cout<<"\t 7. add all nodes in tree: "<<endl;
  316.         cout<<"\t 8. Sort Tree."<<endl;
  317.  
  318.         cin>>choice;
  319.  
  320.         switch(choice)
  321.         {
  322.             case 1:     //create tree
  323.                 if(myTree!=NULL)
  324.                     deleteTree(myTree);
  325.  
  326.                 myTree=createNewTree();
  327.                 break;
  328.  
  329.             case 2:     //add node to tree top
  330.                 if(myTree==NULL)
  331.                     myTree=createNewTree();
  332.                 cout<<"Please enter a value: ";
  333.                 cin>>ivalue;
  334.                 newNode= createNode(ivalue);
  335.                 addNodeToTop(myTree, newNode);
  336.                 break;
  337.  
  338.  
  339.             case 3:     //add node to tree bottom
  340.                 if(myTree==NULL)
  341.                     myTree=createNewTree();
  342.                 cout<<"Please enter a value: ";
  343.                 cin>>ivalue;
  344.                 newNode= createNode(ivalue);
  345.                 addNodeToBottom(myTree, newNode);
  346.                 break;
  347.  
  348.             case 4:     //print tree
  349.                 if(myTree==NULL)
  350.                     myTree=createNewTree();
  351.                 printTree(myTree);
  352.                 break;
  353.  
  354.             case 5:     //delete from tree bottom
  355.                 if(myTree==NULL)
  356.                     myTree=createNewTree();
  357.                 deleteFromBottom(myTree);
  358.                 break;
  359.  
  360.             case 6:     //delete from tree top
  361.                 if(myTree==NULL)
  362.                     myTree=createNewTree();
  363.                 deleteFromTop(myTree);
  364.                 break;
  365.  
  366.             case 7:     //Sum of all nodes in tree
  367.                 if(myTree==NULL)
  368.                     myTree=createNewTree();
  369.                 ivalue=addSum(myTree);
  370.                 cout<<"There are "<<ivalue<<" items in list"<<endl;//SUM
  371.                 break;
  372.  
  373.             case 8:
  374.                 if(myTree==NULL)
  375.                     cout<<"Please make a list first"<<endl;
  376.                 else
  377.                     sortTree(myTree);
  378.                     break;
  379.  
  380.  
  381.         }
  382.  
  383.     }
  384.  
  385.     cout<<"Deleting Tree...";
  386.     if(myTree!=NULL)
  387.         deleteTree(myTree);
  388.  
  389.  
  390.     return 0;
  391. }
Advertisement
Add Comment
Please, Sign In to add comment