Startpunkt
This commit is contained in:
131
tree.cpp
Normal file
131
tree.cpp
Normal file
@@ -0,0 +1,131 @@
|
||||
#include <iostream>
|
||||
#include "defs.h"
|
||||
#include "tree.h"
|
||||
using namespace std;
|
||||
|
||||
treeClass::treeClass():root(NULL) { }
|
||||
|
||||
treeNode::treeNode(dataType item, ptrType L, ptrType R):
|
||||
data(item),left(L),right(R) { }
|
||||
|
||||
bool treeClass::isEmpty()
|
||||
{
|
||||
if (root==NULL)
|
||||
return TRUE;
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
void treeClass::preOrder(ptrType treeNode)
|
||||
{
|
||||
if(treeNode)
|
||||
{
|
||||
cout << " ";
|
||||
cout << treeNode->data;
|
||||
preOrder(treeNode->left);
|
||||
preOrder(treeNode->right);
|
||||
}
|
||||
}
|
||||
void treeClass::inOrder(ptrType treeNode)
|
||||
{
|
||||
if(treeNode)
|
||||
{
|
||||
inOrder(treeNode->left);
|
||||
cout << treeNode->data << " ";
|
||||
inOrder(treeNode->right);
|
||||
}
|
||||
}
|
||||
void treeClass::postOrder(ptrType treeNode)
|
||||
{
|
||||
if(treeNode)
|
||||
{
|
||||
postOrder(treeNode->left);
|
||||
postOrder(treeNode->right);
|
||||
cout << treeNode->data << " ";
|
||||
}
|
||||
}
|
||||
ptrType treeClass::seek(ptrType root, dataType item)
|
||||
{
|
||||
ptrType treeNodeFound;
|
||||
if(root == NULL)
|
||||
treeNodeFound = NULL;
|
||||
else if (root->data == item)
|
||||
treeNodeFound = root;
|
||||
else if (root->data > item)
|
||||
treeNodeFound = seek(root->left, item);
|
||||
else
|
||||
treeNodeFound = seek(root->right, item);
|
||||
return treeNodeFound;
|
||||
}
|
||||
void treeClass::insert(ptrType &root,dataType item)
|
||||
{
|
||||
if(root==NULL)
|
||||
root=new treeNode(item,NULL,NULL);
|
||||
else if(item < root->data)
|
||||
insert(root->left,item);
|
||||
else
|
||||
insert(root->right,item);
|
||||
}
|
||||
void treeClass::delLeft(ptrType &root, dataType &item)
|
||||
{
|
||||
if((root != NULL) && (root->left == NULL))
|
||||
{
|
||||
item = root->data;
|
||||
ptrType delPtr = root;
|
||||
root = root->right;
|
||||
delPtr->right = NULL;
|
||||
delete delPtr;
|
||||
}
|
||||
else
|
||||
delLeft(root->left, item);
|
||||
}
|
||||
void treeClass::delRoot(ptrType &root)
|
||||
{
|
||||
ptrType delPtr;
|
||||
dataType nyItem;
|
||||
|
||||
if(root != NULL)
|
||||
{
|
||||
if((root->left == NULL) && (root->right == NULL))
|
||||
{
|
||||
delete root;
|
||||
root = NULL;
|
||||
}
|
||||
else if(root->left == NULL)
|
||||
{
|
||||
delPtr = root;
|
||||
root = root->right;
|
||||
delPtr->right = NULL;
|
||||
delete delPtr;
|
||||
}
|
||||
else if(root->right == NULL)
|
||||
{
|
||||
delPtr = root;
|
||||
root = root->left;
|
||||
delPtr->left = NULL;
|
||||
delete delPtr;
|
||||
}
|
||||
else
|
||||
{
|
||||
delLeft(root->right, nyItem);
|
||||
root->data = nyItem;
|
||||
}
|
||||
}
|
||||
}
|
||||
void treeClass::del(ptrType &root, dataType item)
|
||||
{
|
||||
if(item==root->data)
|
||||
delRoot(root);
|
||||
else if(item < root->data)
|
||||
del(root->left, item);
|
||||
else
|
||||
del(root->right,item);
|
||||
}
|
||||
void treeClass::save(ptrType root, fstream &fil)
|
||||
{
|
||||
if(root)
|
||||
{
|
||||
fil.write((char*)&root->data,sizeof(root));
|
||||
save(root->left,fil);
|
||||
save(root->right,fil);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user