diff options
Diffstat (limited to 'tree/src/cTree.cpp')
-rw-r--r-- | tree/src/cTree.cpp | 35 |
1 files changed, 17 insertions, 18 deletions
diff --git a/tree/src/cTree.cpp b/tree/src/cTree.cpp index ef6556e..3631fc6 100644 --- a/tree/src/cTree.cpp +++ b/tree/src/cTree.cpp @@ -30,33 +30,32 @@ void cTree::insert(string _data) void cTree::remove(cData* _data) { + //Remove sSubTree subTree; root->remove(_data, &subTree, &root); - cout << "Remove Finished\n"; + //Re-Insert subtree if(subTree.nextBigger && subTree.nextSmaller) { - cNode* newRoot = subTree.nextSmaller->getFirstNode( &(subTree.nextSmaller)); - cout << "Got new root\n"; + cNode* newRoot = subTree.nextSmaller->getFirstNode( &(subTree.nextSmaller)); //returns zero - root->insert(newRoot, &root ); - cout << "Inserted new root\n"; + if(newRoot) //Only insert if nextSmaller is no Endnode + { + root->insert(newRoot, &root ); + } } - if (subTree.nextBigger) - { - root->insert(subTree.nextBigger, &root); - cout << "nextBigger inserted\n"; + if (subTree.nextBigger) { + if(!subTree.nextBigger->isEndnode()) //Inserting Endnodes is pointless + root->insert(subTree.nextBigger, &root); + else + delete subTree.nextBigger; //Delete pointless Endnode } - if(subTree.nextSmaller) - { - root->insert(subTree.nextSmaller, &root); - cout << "nextSmaller inserted\n"; + if(subTree.nextSmaller) { + if(!subTree.nextSmaller->isEndnode()) + root->insert(subTree.nextSmaller, &root); + else + delete subTree.nextSmaller; } - - //Insert remaining subtree - - - }//remove void cTree::getList(list<cData>* _list) |