132 lines
2.3 KiB
C++
132 lines
2.3 KiB
C++
#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);
|
|
}
|
|
}
|