-二叉树递归遍历与非递归遍历实现
引言
二叉树的遍历方法有:前序遍历、中序遍历、后序遍历、层序遍历,其中前中后序遍历又有递归遍历和非递归遍历之分。
由于递归遍历算法本质上是借助系统栈实现的,因此,其非递归遍历算法的实现,也需要借助栈来实现。
对于层序遍历,因为是从根节点开始向下逐层、从左向右遍历的,要求最先遍历到的结点先被访问,即“先进先出”的一种特性,就可以借助一个队列完成层序遍历。
下面,先分别准备栈和队列两种数据结构的链式存储实现类( PS:此次使用C++语言编写代码,这样整体代码结构比较清晰,方法调用时候引用传值比较nice,有关一些基本操作的函数/方法管理起来也更加方便些,以下代码复制粘贴过去即可用)。
0 有关线性表结点定义-LinkNode
LinkNode结点定义本来是放置在一个单独的头文件#include "LinkNode.h"里面的,采用类模板方式定义,是可以线性表通用的,被但是后来考虑到在树的一些操作过程中,需要同时在一个头文件里面引入栈和队列,为了偷懒,就直接将结点类作为栈和队列