Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <fstream>
- #include <stdlib.h>
- using namespace std;
- struct _node
- {
- int value;
- _node* parent;
- _node* leftChild;
- _node* rightChild;
- };
- typedef struct _node node; //redeffinition of struct _node
- struct _tree
- {
- int nodeCount;
- node* root;
- };
- typedef struct _tree tree;
- void printTree(tree* t);
- tree* createNewTree();
- node* createNode(int i);
- void deleteTree(tree * t);
- void deleteHelper(node* n);
- void addNodeToBottom(tree* t, node* n);
- void addNodeToTop(tree* t, node* n);
- void deleteFromTop(tree* t);
- void deleteFromBottom(tree* t);
- int addSum(tree* t);
- void sortTree(tree* t);
- void sortTree(tree* t)
- {
- }
- void addNodeToBottom(tree* t, node* n)
- {
- if(t==NULL)
- {
- cout<<"No tree!";
- return;
- }
- if(t->nodeCount==0)
- {
- t->root = n;
- t->nodeCount++;
- return;
- }
- node* treeArray[20];
- treeArray[0] = t->root;
- node* futureParent = NULL;
- for(int i=0; i<t->nodeCount;i++)
- {
- if(treeArray[i]->leftChild==NULL)
- {
- futureParent = treeArray[i];
- break;
- }
- else if(treeArray[i]->rightChild==NULL)
- {
- futureParent = treeArray[i];
- break;
- }
- treeArray[2*i+1] = (node*)(treeArray[i]->leftChild);
- treeArray[2*i+2] = treeArray[i]->rightChild;
- }
- if(futureParent==NULL)
- {
- cout<<"Error!";
- return;
- }
- if(futureParent->leftChild==NULL)
- {
- futureParent->leftChild = n;
- n->parent = futureParent;
- t->nodeCount++;
- }
- else
- {
- futureParent->rightChild = n;
- n->parent = futureParent;
- t->nodeCount++;
- }
- }
- void addNodeToTop(tree* t, node* n)
- {
- if(t->nodeCount == 0)
- {
- t->root = n;
- t->nodeCount++;
- return;
- }
- n->leftChild = t->root;
- n->rightChild = t->root->rightChild;
- if(t->root->rightChild!=NULL)
- t->root->rightChild->parent=n;
- t->root->rightChild=NULL;
- t->root->parent = n;
- t->root=n;
- }
- void deleteFromTop(tree* t) //crazy
- {
- }
- void deleteFromBottom(tree* t)
- {
- //find lucky parent
- //delete child, set pointer
- }
- int addSum(tree* t)
- {
- return 0;
- }
- tree* createNewTree()
- {
- tree* newTree = new tree[1];
- if (newTree == NULL)
- {
- cout<<"ERror #2";
- exit(-1);
- }
- newTree->nodeCount=0;
- newTree->root=NULL;
- return newTree;
- }
- node* createNode(int i)
- {
- node* newNode = new node[1];
- if(newNode == NULL)
- {
- cout<<"Error #2";
- exit(-1);
- }
- newNode->parent=NULL;
- newNode->leftChild=NULL;
- newNode->rightChild=NULL;
- newNode->value = i;
- return newNode;
- }
- void deleteTree(tree* t)
- {
- deleteHelper(t->root);
- delete (t);
- t=NULL;
- }
- void deleteHelper(node* n)
- {
- if(n==NULL)
- return;
- if(n->leftChild)
- deleteHelper(n->leftChild);
- if(n->rightChild)
- deleteHelper(n->rightChild);
- delete (n);
- n=NULL;
- }
- void printTree(tree* t)
- {
- if(t==NULL)
- {
- cout<<"No tree!";
- return;
- }
- if(t->nodeCount==0)
- {
- cout<<"No nodes!";
- return;
- }
- node* treeArray[20];
- treeArray[0] = t->root;
- for(int i=0; i<t->nodeCount;i++)
- {
- if(treeArray[i]->leftChild==NULL)
- {
- break;
- }
- else if(treeArray[i]->rightChild==NULL)
- {
- break;
- }
- treeArray[2*i+1] = treeArray[i]->leftChild;
- treeArray[2*i+2] = treeArray[i]->rightChild;
- }
- int line = 0;//printed numbers
- int lineLength = 1;
- for(int i=0; i<t->nodeCount;i++)
- {
- cout<<treeArray[i]->value<<" ";
- line++;
- if(line==lineLength)
- {
- cout<<"\n";
- line = 0;
- lineLength*=2;
- }
- }
- }
- int main()
- {
- node* newNode;
- int choice= 999;
- tree* myTree=NULL;
- int ivalue=0;
- while(choice!= 0)
- {
- cout<<"Choose what you want!: "<<endl;
- cout<<"\t 0. Press 0 to exit."<<endl;
- cout<<"\t 1. CreateTree."<<endl;
- cout<<"\t 2. add node to tree top."<<endl;
- cout<<"\t 3. add node to tree bottom."<<endl;
- cout<<"\t 4. print Tree."<<endl;
- cout<<"\t 5. delete from tree bottom."<<endl;
- cout<<"\t 6. delete from tree top."<<endl;
- cout<<"\t 7. add all nodes in tree: "<<endl;
- cout<<"\t 8. Sort Tree."<<endl;
- cin>>choice;
- switch(choice)
- {
- case 1: //create tree
- if(myTree!=NULL)
- deleteTree(myTree);
- myTree=createNewTree();
- break;
- case 2: //add node to tree top
- if(myTree==NULL)
- myTree=createNewTree();
- cout<<"Please enter a value: ";
- cin>>ivalue;
- newNode= createNode(ivalue);
- addNodeToTop(myTree, newNode);
- break;
- case 3: //add node to tree bottom
- if(myTree==NULL)
- myTree=createNewTree();
- cout<<"Please enter a value: ";
- cin>>ivalue;
- newNode= createNode(ivalue);
- addNodeToBottom(myTree, newNode);
- break;
- case 4: //print tree
- if(myTree==NULL)
- myTree=createNewTree();
- printTree(myTree);
- break;
- case 5: //delete from tree bottom
- if(myTree==NULL)
- myTree=createNewTree();
- deleteFromBottom(myTree);
- break;
- case 6: //delete from tree top
- if(myTree==NULL)
- myTree=createNewTree();
- deleteFromTop(myTree);
- break;
- case 7: //Sum of all nodes in tree
- if(myTree==NULL)
- myTree=createNewTree();
- ivalue=addSum(myTree);
- cout<<"There are "<<ivalue<<" items in list"<<endl;//SUM
- break;
- case 8:
- if(myTree==NULL)
- cout<<"Please make a list first"<<endl;
- else
- sortTree(myTree);
- break;
- }
- }
- cout<<"Deleting Tree...";
- if(myTree!=NULL)
- deleteTree(myTree);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment