#include <iostream>
#include <queue> //// Use Queue is available in C ++
using namespace std;
// create one node of the tree
struct CTreeNode {
int Key;
CTreeNode* Left;
CTreeNode* Right;
CTreeNode(int _key) : Key(_key),
Left(0), Right(0) {}
};
class Tree {
public:
Tree();
~Tree();
CTreeNode* Root() { return root; };
void addNode(int key);
void levelOrder();
private:
void addNode(int key, CTreeNode* leaf);
void freeNode(CTreeNode* leaf);
CTreeNode* root;
};
Tree::Tree() {
root = 0;
}
Tree::~Tree() {
freeNode(root);
}
void Tree::freeNode(CTreeNode* leaf)
{
if (leaf != 0)
{
freeNode(leaf->Left);
freeNode(leaf->Right);
delete leaf;
}
}
void Tree::addNode(int key) {
if (root == 0) {
CTreeNode* n = new CTreeNode(key);
root = n;
}
else {
addNode(key, root);
}
}
void Tree::addNode(int key, CTreeNode* leaf)
{
if (key <= leaf->Key) {
if (leaf->Left != 0)
addNode(key, leaf->Left);
else
{
CTreeNode* n = new CTreeNode(key);
leaf->Left = n;
}
}
else {
if (leaf->Right != 0)
addNode(key, leaf->Right);
else {
CTreeNode* n = new CTreeNode(key);
leaf->Right = n;
}
}
}
// Traversing the tree in width
void Tree::levelOrder() {
queue<CTreeNode*> q;
q.push(root);
while (!q.empty())
{
CTreeNode* p = q.front(); // take the surrender value
cout << p
->Key
<< " "; // print key if (p->Left != 0)
q.push(p->Left);
if (p->Right != 0)
q.push(p->Right);
q.pop();
}
}
int main()
{
Tree* tree = new Tree();
int N;
int K;
for (int i = 0; i < N; i++)
{
tree->addNode(K);
}
tree->levelOrder();
//system("pause");
return 0;
}