// copyright: beautifulsoul84hung
#include <iostream>
#include <fstream>
#include <assert.h>
using namespace std;
typedef class node* Node;
class node
{
private:
int data;
node *left;
node *right;
public:
node (int data, Node left, Node right)
{
this->data = data;
this->left = left;
this->right = right;
}
void setData (int data)
{
this->data = data;
}
int getData () const
{
return data;
}
void setLeft (Node left)
{
this->left = left;
}
Node getLeft () const
{
return left;
}
void setRight (Node right)
{
this->right = right;
}
Node getRight () const
{
return right;
}
void print ()
{
cout << getData
() << " "; }
friend class binarySearchTree;
};
typedef class binarySearchTree* BinarySearchTree;
class binarySearchTree
{
private:
Node root;
public:
void setRoot (Node root)
{
this->root = root;
}
Node getRoot () const
{
return root;
}
binarySearchTree (Node root)
{
this->root = root;
}
binarySearchTree ()
{
root = NULL;
}
void creatBSTree (const char* filename)
{
int data;
Node tmp;
fstream _in (filename, ios::in);
while (!_in.eof ())
{
_in >> data;
tmp = new node (data, NULL, NULL);
insert(tmp);
}
}
void insert (Node tmp)
{
if (getRoot() == NULL)
setRoot(tmp);
else
{
Node bsh = getRoot();
if (bsh->getData() > tmp->getData())
if (bsh->getLeft () == NULL)
bsh->setLeft(tmp);
else
{
BinarySearchTree newTree = new binarySearchTree (bsh->getLeft());
newTree->insert (tmp);
}
else
{
if (bsh->getRight() == NULL)
bsh->setRight(tmp);
else
{
BinarySearchTree newTree = new binarySearchTree (bsh->getRight());
newTree->insert (tmp);
}
}
}
}
void printPost ()
{
if (getRoot() != NULL)
{
BinarySearchTree tmp = new binarySearchTree (getRoot()->getLeft());
tmp->printPost ();
tmp = new binarySearchTree (getRoot()->getRight());
tmp->printPost ();
getRoot()->print ();
}
}
bool SearchBT (int value)
{
Node tmp = new node (value, NULL, NULL);
Node bsh = getRoot();
if (getRoot() == NULL)
return false;
if (getRoot()->getData() == value)
return true;
else
{
if (getRoot()->getData() > value)
{
BinarySearchTree newTree = new binarySearchTree (getRoot()->getLeft());
newTree->SearchBT (value);
}
else
{
BinarySearchTree newTree = new binarySearchTree (getRoot()->getRight());
newTree->SearchBT (value);
}
}
}
// -- .......
// -- .......
};
int main ()
{
BinarySearchTree tree = new binarySearchTree ();
tree->creatBSTree("hung.txt");
tree->printPost ();
return 0;
}