// Node class
class Node {
string key;
Node* left;
Node* right;
public:
Node() { key=-1; left=NULL; right=NULL; };
void setKey(string aKey) { key = aKey; };
void setLeft(Node* aLeft) { left = aLeft; };
void setRight(Node* aRight) { right = aRight; };
string Key() { return key; };
Node* Left() { return left; };
Node* Right() { return right; };
};
// Tree class
class Tree {
Node* root;
public:
Tree();
~Tree();
Node* Root() { return root; };
void addNode(string key);
void levelOrder(Node* n);
void Inorder(Node* );
void Postorder(Node* );
void Preorder(Node* node);
private:
void addNode(string key, Node* leaf);
void freeNode(Node* leaf);
};
void Tree::Tree()
{
root = null;
}
void Tree::~Tree()
{
freeNode(root);
}
// Add a node (private)</cite>
void Tree::addNode(string key, Node* leaf) {
if( key <= leaf->Key() ) {
if( leaf->Left() != NULL )
addNode(key, leaf->Left());
else {
Node* n =new Node();
n->setKey(key);
leaf->setLeft(n);
}
}
else{
if( leaf->Right() != NULL )
addNode(key, leaf->Right());
else</var> {
Node* n = new</var> Node();
n->setKey(key);
leaf->setRight(n);
}
}
}
void Tree::freeNode(Node* leaf)
{
if(leaf != NULL)
{
freeNode(leaf->left());
freeNode(leaf->right());
delete leaf;
}
}
void Tree::addNode(string key)
{
if(root == NULL){
cout << "add root node"<<key<<endl;
Node * n = new Node();
n->setKey(key);
root = n;
}else{
count<< "add other node"<<key <<endl;
addNode(key, root);
}
}
void Tree::preorder(Tree* root)
{
if(root){
cout<<"node->key()"<<endl;
preorder(root->left);
preorder(root->right);
}
}
void Tree::postorder(Tree * root)
{
if(root){
postorder(root->left());
postorder(root->right());
cout<<root->key()<<endl;
}
}
void Tree::leverTravesal(Tree *root)
{
if(root){
Queue <Node*> v;
v.push(root);
while(! q.empty()){
n = v.front()
cout<< n->Key() <<endl;
if(n->left() != null)
v.push(n->left());
if(n->rithg != null)
v.push(n->right());
v.pop();
}
}
}
http://www.cplusplus.com/forum/beginner/131457/