Leetcode快速入门之第六节课: 利用栈和队列实现树的遍历(前序中序后序层次)
Posted herosunly
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode快速入门之第六节课: 利用栈和队列实现树的遍历(前序中序后序层次)相关的知识,希望对你有一定的参考价值。
1. 前言
和几个算法交流群的朋友交流,发现面试中经常考察非递归遍历树。具体来说即为以下四种遍历方式:
- 前序遍历
- 中序遍历
- 后序遍历
- 层次遍历
甚为悲惨的是,其中一位朋友因为没有答上而被面试官叫停了面试。所以为了帮助大家拿到满意的offer,所以特意写下了该篇博客。
2. 树的深度优先搜索
利用栈模拟递归是实现非递归方式遍历树的核心方法之一。那该如何进行实现呢?首先要明确栈的特点是:先进后出。栈里面存放的是函数调用列表,压栈和增加函数调用的列表是对应的,出栈和执行函数是对应的。所以很关键的一点是设计好压栈和出栈的顺序。举例来说,假设以下三个函数是要顺序执行的函数:
函数1
函数2
函数3
那么压栈和出栈的顺序应该是什么样呢?比如,压栈的顺序应该和函数的执行顺序是一致的吗?(请读者按照这个顺序进行思考并验证)。显然压栈的顺序
以上是关于Leetcode快速入门之第六节课: 利用栈和队列实现树的遍历(前序中序后序层次)的主要内容,如果未能解决你的问题,请参考以下文章
Leetcode快速入门之第五节课: 使用多指针+区间法解决链表问题