#include<iostream>
using namespace std;
struct BiNode
{
int data;
BiNode *lchild, *rchild;
};
class BiTree {
public:
BiTree() { root = Creat(root); }
~BiTree() { Release(root); }
void PreOrder() { PreOrder(root); }
void InOrder() { InOrder(root); }
void PostOrder() { PostOrder(root); }
private:
int a;
BiNode *root;
BiNode *Creat(BiNode *bt);
void Release(BiNode *bt);
void PreOrder(BiNode *bt);
void InOrder(BiNode *bt);
void PostOrder(BiNode *bt);
};
// 构造函数
BiNode *BiTree::Creat(BiNode *bt)
{
cout << "请输入结点,以0结尾:" << endl;
cin >> a;// 输入a,如果为0,结束,否则将该结点存入二叉树中
if (a == 0)
bt = NULL;
else
{
bt = new BiNode;
bt->data = a;
bt->lchild = Creat(bt->lchild);// 建立左子树
bt->rchild = Creat(bt->rchild);// 建立右子树
}
return bt;
}
//析构函数
void BiTree::Release(BiNode *bt)
{
if (bt == NULL)
{
Release(bt->lchild);// 释放左子树
Release(bt->rchild);
delete bt;// 释放根结点
}
}
// 二叉树的前序遍历
void BiTree::PreOrder(BiNode *bt)
{
if (bt == NULL)
return;//递归条件结束
else
{
cout << bt->data<<" ";
PreOrder(bt->lchild);// 前序递归遍历左子树
PreOrder(bt->rchild);// 前序递归遍历右子树
}
}
// 中序遍历
void BiTree::InOrder(BiNode *bt)
{
if (bt == NULL)
return;//递归条件结束
else
{
InOrder(bt->lchild);
cout << bt->data<<" ";
InOrder(bt->rchild);
}
}
// 后序遍历
void BiTree::PostOrder(BiNode *bt)
{
if (bt == NULL)
return;//递归条件结束
else
{
PostOrder(bt->lchild);
PostOrder(bt->rchild);
cout << bt->data<<" ";
}
}
int main()
{
BiTree bitree;
cout << "前序遍历的结果为:" << endl;
bitree.PreOrder();
cout << endl;
cout << "中序遍历的结果为:" << endl;
bitree.InOrder();
cout << endl;
cout << "后序遍历的结果为:" << endl;
bitree.PostOrder();
system("pause");
return 0;
}
运行结果: