模板类实现二叉树前序、中序、后序遍历

来源:互联网 发布:保姆偷喝母乳 知乎 编辑:程序博客网 时间:2024/05/22 06:17

首先我们需要定义节点类以及二叉树类:

#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;}
程序手动创建的二叉树为:

程序运行结果为:




0 0
原创粉丝点击