/*
二叉树创建于操作类
*/
#if !defined BITREENODE_H
#define BITREENODE_H
#include<iostream>
typedef struct BiTreeNode
{
//数据
char data;
//指向左子树与右子数的指针
struct BiTreeNode *lChild,*rChild;
}BiTreeNode, *BiTree;
class BiTreeFunc
{
public:
//创建二叉树
void CreatBiTree(BiTree &tree);
//读取节点
void ReadNode(const BiTree &treeNode);
//先序遍历
void PreOrder(const BiTree &tree);
//中序遍历
void InOrder(const BiTree &tree);
//后序遍历
void PostOrder(const BiTree &tree);
};
#endif
/*
二叉树类的实现
*/
#include"BiTreeFunc.h"
#include<iostream>
using namespace std;
//创建二叉树
void BiTreeFunc::CreatBiTree(BiTree &tree)
{
//cout<<"Please input the tree node : "<<endl;
char nodeData;
cin>>nodeData;
if('#' == nodeData)
{
tree = NULL;
}
else
{
tree = (BiTree)malloc(sizeof(BiTreeNode));
tree->data = nodeData;
CreatBiTree(tree->lChild);
CreatBiTree(tree->rChild);
}
}
//读取二叉树节点
void BiTreeFunc::ReadNode(const BiTree &treeNode)
{
cout<<treeNode->data;
}
//先序遍历二叉树
void BiTreeFunc::PreOrder(const BiTree &biTreeNode)
{
if(NULL != biTreeNode)
{
ReadNode(biTreeNode);
PreOrder(biTreeNode->lChild);
PreOrder(biTreeNode->rChild);
}
}
//中序遍历二叉树
void BiTreeFunc::InOrder(const BiTree &biTreeNode)
{
if(NULL != biTreeNode)
{
PostOrder(biTreeNode->lChild);
ReadNode(biTreeNode);
PostOrder(biTreeNode->rChild);
}
}
//后序遍历二叉树
void BiTreeFunc::PostOrder(const BiTree &biTreeNode)
{
if(NULL != biTreeNode)
{
PostOrder(biTreeNode->lChild);
PostOrder(biTreeNode->rChild);
ReadNode(biTreeNode);
}
}
/*
类测试
*/
#include<iostream>
#include"BiTreeFunc.h"
using namespace std;
void main()
{
BiTreeFunc biTreeTest;
BiTree tree;
biTreeTest.CreatBiTree(tree);
cout<<"先序遍历: ";
biTreeTest.PreOrder(tree);
cout<<endl;
cout<<"中序遍历: ";
biTreeTest.InOrder(tree);
cout<<endl;
cout<<"后序遍历: ";
biTreeTest.PostOrder(tree);
cout<<endl;
system("pause");
}