summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar jonas <himself@jonasgunz.de> 2017-01-31 10:33:33 +0100
committerGravatar jonas <himself@jonasgunz.de> 2017-01-31 10:33:33 +0100
commitb30ae0e49c76f5038f9ab6dc9a4d45517f91c827 (patch)
tree373bbb01ec8bc5c7b1a43d586cb34519c8757383
parent033866129a330b386f5d4b972a55d59f240b5d26 (diff)
downloadtree-b30ae0e49c76f5038f9ab6dc9a4d45517f91c827.tar.gz
working.... kinda
-rw-r--r--tree/src/cNode.cpp32
-rw-r--r--tree/src/cNode.h17
-rw-r--r--tree/src/cTree.cpp35
-rw-r--r--tree/src/cTree.h4
-rw-r--r--tree/src/main.cpp8
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;
}