diff options
author | jonas <himself@jonasgunz.de> | 2017-01-31 10:33:33 +0100 |
---|---|---|
committer | jonas <himself@jonasgunz.de> | 2017-01-31 10:33:33 +0100 |
commit | b30ae0e49c76f5038f9ab6dc9a4d45517f91c827 (patch) | |
tree | 373bbb01ec8bc5c7b1a43d586cb34519c8757383 | |
parent | 033866129a330b386f5d4b972a55d59f240b5d26 (diff) | |
download | tree-b30ae0e49c76f5038f9ab6dc9a4d45517f91c827.tar.gz |
working.... kinda
-rw-r--r-- | tree/src/cNode.cpp | 32 | ||||
-rw-r--r-- | tree/src/cNode.h | 17 | ||||
-rw-r--r-- | tree/src/cTree.cpp | 35 | ||||
-rw-r--r-- | tree/src/cTree.h | 4 | ||||
-rw-r--r-- | tree/src/main.cpp | 8 |
5 files changed, 84 insertions, 12 deletions
diff --git a/tree/src/cNode.cpp b/tree/src/cNode.cpp index b6542e6..c7d5cf4 100644 --- a/tree/src/cNode.cpp +++ b/tree/src/cNode.cpp @@ -41,17 +41,20 @@ void cDatanode::insert(cData* _data, cNode** _me) //nextSmaller->isEnd() ? (void)(nextSmaller = new cDatanode(_data)) : nextSmaller->insert(_data); }//insert -void cDatanode::remove(cData* _data, list<cData>* _list) +void cDatanode::remove(cData* _data, list<cData>* _list, cNode** _me) { if(*_data == *data) { nextSmaller->getSortet(_list); nextBigger->getSortet(_list); + clear(); + *_me = new cEndnode(); + delete this; } else if (*_data > *data) - nextBigger->remove(_data, _list); + nextBigger->remove(_data, _list, &nextBigger); else if (*_data < *data) - nextSmaller->remove(_data, _list); + nextSmaller->remove(_data, _list, &nextSmaller); }//remove cData* cDatanode::search(string _search) @@ -81,10 +84,23 @@ void cDatanode::clear() { nextSmaller->clear(); delete nextSmaller; + nextSmaller = NULL; + nextBigger->clear(); - delete nextSmaller; + delete nextBigger; + nextBigger = NULL; } +void cDatanode::draw(int _depth) +{ + for (int i = 0; i <= _depth; i++) + cout << " "; + cout << "|-" << data->getData() << endl; + + nextSmaller->draw(_depth + 1); + nextBigger->draw(_depth + 1); + +} // //============================================================================================================================== // @@ -109,7 +125,7 @@ void cEndnode::insert(cData* _data, cNode** _me) delete this; } -void cEndnode::remove(cData*, list<cData>*) +void cEndnode::remove(cData*, list<cData>*, cNode**) { return; } @@ -129,7 +145,13 @@ void cEndnode::clear() return; } +void cEndnode::draw(int _depth) +{ + for (int i = 0; i <= _depth; i++) + cout << " "; + cout << "|-$\n"; +} diff --git a/tree/src/cNode.h b/tree/src/cNode.h index 04a621d..cffc7a5 100644 --- a/tree/src/cNode.h +++ b/tree/src/cNode.h @@ -10,6 +10,7 @@ #include "cData.h" #include <list> +#include <iostream> using namespace std; @@ -27,7 +28,7 @@ public: * Inserts *cData into tree * cNode** required to change pointer in the caller's pointer to next element */ - virtual void remove(cData*, list<cData>*) = 0; + virtual void remove(cData*, list<cData>*, cNode**) = 0; /* * Removes *cData from tree */ @@ -43,6 +44,7 @@ public: virtual void clear() = 0; + virtual void draw(int _depth) = 0; }; class cDatanode:public cNode @@ -59,7 +61,7 @@ public: /* * Inserts *cData into tree */ - void remove(cData*, list<cData>*); + void remove(cData*, list<cData>*, cNode**); /* * Removes *cData from tree */ @@ -72,8 +74,14 @@ public: * returns false */ void getSortet(list<cData>* _list); - + /* + * Copy all cData Instances into _list + */ void clear(); + /* + * clears the tree + */ + void draw(int _depth); private: cNode *nextSmaller, *nextBigger; cData *data; @@ -94,7 +102,7 @@ public: /* * Inserts *cData into tree */ - void remove(cData*, list<cData>*); + void remove(cData*, list<cData>*, cNode**); /* * Removes *cData from tree */ @@ -110,6 +118,7 @@ public: void clear(); + void draw(int _depth); private: }; diff --git a/tree/src/cTree.cpp b/tree/src/cTree.cpp index d09119b..5ac379e 100644 --- a/tree/src/cTree.cpp +++ b/tree/src/cTree.cpp @@ -31,8 +31,8 @@ void cTree::insert(string _data) void cTree::remove(cData* _data) { - list<cData> dataList; //List of Data that ahs to be re-inserted into the tree - root->remove(_data, &dataList); + list<cData> dataList; //List of Data that has to be re-inserted into the tree + root->remove(_data, &dataList, &root); ///TODO: Optimize!!! while(!dataList.empty()) @@ -46,3 +46,34 @@ void cTree::getList(list<cData>* _list) { root->getSortet(_list); } + +void cTree::draw() +{ + root->draw(0); +} + +cData* cTree::search(string _search) +{ + return root->search(_search); +} + + + + + + + + + + + + + + + + + + + + + diff --git a/tree/src/cTree.h b/tree/src/cTree.h index 9806f94..db930ed 100644 --- a/tree/src/cTree.h +++ b/tree/src/cTree.h @@ -23,7 +23,9 @@ public: void balance(); void getList(list<cData>*); void remove(cData*); - cData search(string); + cData* search(string); + + void draw(); private: diff --git a/tree/src/main.cpp b/tree/src/main.cpp index cdaa7b5..9a5a934 100644 --- a/tree/src/main.cpp +++ b/tree/src/main.cpp @@ -10,6 +10,14 @@ int main (void) { + cTree* a = new cTree(); + a->insert("Hallo"); + a->insert("faggot"); + a->insert("Arschloch"); + a->draw(); + cout << "-------------------" << endl; + a->remove(a->search("Hallo")); + a->draw(); return 0; } |