二叉树的非递归遍历
二叉树的非递归遍历
回顾一下浙大的数据结构课程,看PPT过程中发现有的地方理解的不到位,去B站搜了这视频便于理解,讲的非常好,细节到位。本博客贴出了一些关键点便于大家参考,具体实例步骤可以去视频看,更加详细便于个人理解。
视频链接 : 二叉树的非递归遍历
1. 先序遍历
两步走:
1. 沿着根节点一直访问节点(打印)(实际上对应的是中间节点),并不断将节点压栈,此步骤一直执行到左子树为空
2. 出栈一个节点(中间节点),转向此节点的右子树
循环第一步和第二步
2. 中序遍历
与先序遍历简直如出一辙,就是需要先打印节点
三步走
1. 从根节点开始不断沿着左子树节点下沉,过程中将节点(对应中间节点)不断入栈,此过程一直持续到左子树为空
2. 出栈一个节点(中间节点),进行访问(打印)
3. 转向此中间节点的右子树
循环上面的过程
3.后序遍历
后续遍历比前两个麻烦,需要两次入栈,两次出栈。(1)中的不出栈改为出栈,应该是PPT写错了。
分四步
1. 首先从根节点不断指向其左子树,并且入栈(便于后面出栈寻找右子树),此过程执行到左子树为空。
2. 出栈一个节点(中间节点),指向这个节点的右子树,并且将这个中间节点入栈。
3. 接下去应该是循环上面两个步骤,也即把当前中间节点的右子树节点当作根节点进行1和2,最终达到的效果是右子树被访问完成。
4. 出栈一个节点并进行访问,这个节点对应那个中间节点。
tip:用了一个flag标志位用于判断出栈的时候是访问左子树完成,还是右子树访问完成。