1. 前言
和几个算法交流群的朋友交流,发现面试中经常考察非递归遍历树。具体来说即为以下四种遍历方式:
- 前序遍历
- 中序遍历
- 后序遍历
- 层次遍历
甚为悲惨的是,其中一位朋友因为没有答上而被面试官叫停了面试。所以为了帮助大家拿到满意的offer,所以特意写下了该篇博客。
2. 树的深度优先搜索
利用栈模拟递归是实现非递归方式遍历树的核心方法之一。那该如何进行实现呢?首先要明确栈的特点是:先进后出。栈里面存放的是函数调用列表,压栈和增加函数调用的列表是对应的,出栈和执行函数是对应的。所以很关键的一点是设计好压栈和出栈的顺序。举例来说,假设以下三个函数是要顺序执行的函数:
函数1
函数2
函数3
那么压栈和出栈的顺序应该是什么样呢?比如,压栈的顺序应该和函