#include #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); } }