首先我们需要定义节点类以及二叉树类:
#include<iostream>
using namespace std;
template<class T> class BirnaryTree; //先声明一个类
template<class T>
class TreeNode //节点类定义
{
public:
TreeNode()
{
left=NULL;
right=NULL;
}
T data; //数据
TreeNode *left; //左子节点
TreeNode *right; //右子节点
};
template<class T>
class BirnaryTree //二叉树类定义
{
public:
void PreOrder(); //前序遍历
void PreOrder(TreeNode<T> *currentNode);
void InOrder(); //中序遍历
void InOrder(TreeNode<T> *currentNode);
void PostOrder(); //后序遍历
void PostOrder(TreeNode<T> *currentNode);
public:
TreeNode<T> *root; //二叉树根节点
};
1、前序(先序)遍历的递归实现方法
若二叉树非空,则依次执行如下操作:
(1)访问根节点
(2)遍历左子树
(3)遍历右子树
程序代码如下:
template<class T>//前序
void BirnaryTree<T>::PreOrder()
{
if(root==NULL)
return;
PreOrder(root);//成员函数调用另外一个成员函数,将根传入
}
template<class T>
void BirnaryTree<T>::PreOrder(TreeNode<T>* currentNode)
{
if(currentNode!=NULL)
{
cout<<currentNode->data;
PreOrder(currentNode->left);
PreOrder(currentNode->right);
}
}
2、中序遍历的递归实现方法
若二叉树非空,则依次执行如下操作:
(1)遍历左子树
(2)访问根节点
(3)遍历右子树
程序代码如下:
template<class T>//中序
void BirnaryTree<T>::InOrder()
{
if(root==NULL)
return;
InOrder(root);//成员函数调用另外一个成员函数,将根传入
}
template<class T>
void BirnaryTree<T>::InOrder(TreeNode<T>* currentNode)
{
if(currentNode!=NULL)
{
InOrder(currentNode->left);
cout<<currentNode->data;
InOrder(currentNode->right);
}
}
3、后序遍历的递归实现方法
若二叉树非空,则依次执行如下操作:
(1)遍历左子树
(2)遍历右子树
(3)访问根节点
程序代码如下:
template<class T>//后序
void BirnaryTree<T>::PostOrder()
{
if(root==NULL)
return;
PostOrder(root);//成员函数调用另外一个成员函数,将根传入
}
template<class T>
void BirnaryTree<T>::PostOrder(TreeNode<T>* currentNode)
{
if(currentNode!=NULL)
{
PostOrder(currentNode->left);
PostOrder(currentNode->right);
cout<<currentNode->data;
}
}
下面是主函数的测试代码:
int main()
{
BirnaryTree<char> tree;
TreeNode<char> add,sub,mul,div,a,b,c,d,e;
//通过手动创建了一个二叉树
add.data='+';
sub.data='-';
mul.data='*';
div.data='/';
a.data='A';
b.data='B';
c.data='C';
d.data='D';
e.data='E';
tree.root=&add;
add.left=⊂add.right=&e;
sub.left=&mul;sub.right=&d;
mul.left=÷mul.right=&c;
div.left=&a;div.right=&b;
cout<<"前序:"<<endl;
tree.PreOrder();
cout<<endl<<"中序:"<<endl;
tree.InOrder();
cout<<endl<<"后序:"<<endl;
tree.PostOrder();
cout<<endl;
return 0;
}
程序手动创建的二叉树为:
程序运行结果为: