模板类实现二叉树前序、中序、后序遍历
来源:互联网 发布:保姆偷喝母乳 知乎 编辑:程序博客网 时间: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
- 模板类实现二叉树前序、中序、后序遍历
- 二叉树前序遍历、中序遍历、后序遍历的非递归实现
- 用Java实现二叉树前序遍历、中序遍历和后序遍历。
- 二叉树前序遍历、中序遍历和后序遍历
- 二叉树前序、中序、后序遍历
- 二叉树前序、中序、后序遍历
- 二叉树前序,中序,后序遍历
- 二叉树前序、中序、后序遍历
- 二叉树前序、中序、后序遍历
- 二叉树先序,中序,后序遍历非递归实现
- 二叉树先序,中序,后序遍历非递归实现
- 二叉树先序,中序,后序遍历非递归实现
- 二叉树先序,中序,后序遍历非递归实现
- 二叉树先序、中序、后序遍历算法的实现
- 二叉树先序,中序,后序遍历非递归实现
- 二叉树先序,中序,后序遍历非递归实现
- 二叉树先序,中序,后序遍历非递归实现
- 实现二叉树先序、中序、后序遍历
- ISE约束控制
- 硬币问题
- 分布式服务框架--Dubbo
- 牵一发而动全身的CPU性能指标
- 自定义类型使用foreach循环
- 模板类实现二叉树前序、中序、后序遍历
- 获取html的当前级以及上一级的导航名称
- [JAVA]堆排
- Android学习第十二篇——Fragment基础学习
- 欢迎使用CSDN-markdown编辑器
- android oom分析步骤
- Android 点击两次返回键退出程序
- 斐波那契
- 求两个数1~n之间的素数