#ifndef _BiTree
#define _BiTree
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;
struct BiNode
{
char data;
struct BiNode *left,*right;
};
class BiTree
{
public:
BiTree();
~BiTree();
BiNode *getRoot();
void preOrder(BiNode *root);
void postOrder(BiNode *root);
void inOrder(BiNode *root);
void levelOrder(BiNode *root);
private:
BiNode *root;
BiNode *create();
void Release(BiNode *root);
};
BiTree::BiTree()
{
this->root=create();
}
BiNode *BiTree::create()
{
//ifstream cin("E:\\cpp_work\\test\BiTree\\BiTree\\test.txt");
BiNode *root;
char ch;
cout<<"Please input data to build a binary tree:"<<endl;
cin>>ch;
if(ch=='#')
root=NULL;
else
{
root=new BiNode;
root->data=ch;
root->left=create();
root->right=create();
}
return root;
}
BiTree::~BiTree()
{
Release(root);
}
void BiTree::Release(BiNode *root)
{
if(root!=NULL)
{
Release(root->left);
Release(root->right);
delete root;
}
}
BiNode* BiTree::getRoot()
{
return root;
}
void BiTree::preOrder(BiNode *root)
{
if(root==NULL)return;
else
{
cout<<root->data;
preOrder(root->left);
preOrder(root->right);
}
};
void BiTree::inOrder(BiNode *root)
{
if(root==NULL)return;
else
{
inOrder(root->left);
cout<<root->data;
inOrder(root->right);
}
}
void BiTree::postOrder(BiNode *root)
{
if(root==NULL)return;
else
{
postOrder(root->left);
postOrder(root->right);
cout<<root->data;
}
}
void BiTree::levelOrder(BiNode *root)
{
queue<BiNode *> Q;
if(root==NULL)
return;
Q.push(root);
while (!Q.empty())
{
BiNode *front=Q.front();
Q.pop();
cout<<front->data;
if(front->left!=NULL)
Q.push(front->left);
if(front->right!=NULL)
Q.push(front->right);
}
}
#endif