#include<iostream>
#include<string>
using namespace std;
const int MAX=9999;
class BNode
{
public:
BNode(){}
BNode(int i):value(i),left(NULL),right(NULL){}
~BNode(){}
BNode *left;
BNode *right;
int value;
};
class BTree
{
public:
BTree(){}
BTree(int i){root=new BNode(i);}
~BTree(){
destroy(root);
}
bool CreateTree();
bool InsertNode(BNode *node);
void PrinTree(BNode *t)const;
protected:
void destroy(BNode *r){
if(r!=NULL)
{
destroy(r->left);
destroy(r->right);
delete r;
}
}
private:
BTree(const BTree &);
BTree& operator=(const BTree&);
//int i;
public:
BNode *root;
};
bool BTree::CreateTree()
{
int i=0;
while(i!=MAX)
{
cout<<"Enter Tree Node's number:"<<endl;
cin>>i;
//cout<<i<<endl;
if(i==MAX)
break;
//cout<<i<<endl;
if(!root)
{
//cout<<"111"<<endl;
root=new BNode(i);
continue;
if(!root)
return false;
}
//cout<<"root"<<root->value<<endl;
//cout<<"222"<<endl;
BNode *node=new BNode(i);
if(!node)
return false;
// cout<<"333"<<endl;
InsertNode(node);
}
return true;
}
bool BTree::InsertNode(BNode *node)
{
if(!root)
return false;
/*if((root->left==NULL)&&(root->right==NULL))
{
if(node->value>root->value)
root->right=node;
if(node->value<root->value)
root->left=node;
}*/
BNode *p=root;
BNode *clone=NULL;
while(p!=NULL)
{
//clone=p;
if(p&&(p->value>node->value))
{
clone=p;
//cout<<clone->value<<endl;
p=p->left;
}
if(p&&(p->value<node->value))
{
clone=p;
//cout<<clone->value<<endl;
p=p->right;
}
}
if((p==NULL)&&(clone->value>node->value))
{clone->left=node;return true;}
if((p==NULL)&&(clone->value<node->value))
{clone->right=node;return true;}
//return true;
}
void BTree::PrinTree(BNode*t)const
{
BNode *p=t;
if(p!=NULL)
{
PrinTree(p->left);
cout<<p->value<<" ";
PrinTree(p->right);
}
}
int main(int argc,char *argv)
{
BTree tree(45);
tree.CreateTree();
tree.PrinTree(tree.root);
}