Leetcode快速入门之第六节课: 利用栈和队列实现树的遍历(前序中序后序层次)

Posted herosunly

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode快速入门之第六节课: 利用栈和队列实现树的遍历(前序中序后序层次)相关的知识,希望对你有一定的参考价值。

1. 前言

  和几个算法交流群的朋友交流,发现面试中经常考察非递归遍历树。具体来说即为以下四种遍历方式:

  • 前序遍历
  • 中序遍历
  • 后序遍历
  • 层次遍历

  甚为悲惨的是,其中一位朋友因为没有答上而被面试官叫停了面试。所以为了帮助大家拿到满意的offer,所以特意写下了该篇博客。

2. 树的深度优先搜索

  利用栈模拟递归是实现非递归方式遍历树的核心方法之一。那该如何进行实现呢?首先要明确栈的特点是:先进后出。栈里面存放的是函数调用列表,压栈和增加函数调用的列表是对应的,出栈和执行函数是对应的。所以很关键的一点是设计好压栈和出栈的顺序。举例来说,假设以下三个函数是要顺序执行的函数:

函数1
函数2
函数3

  那么压栈和出栈的顺序应该是什么样呢?比如,压栈的顺序应该和函数的执行顺序是一致的吗?(请读者按照这个顺序进行思考并验证)。显然压栈的顺序

以上是关于Leetcode快速入门之第六节课: 利用栈和队列实现树的遍历(前序中序后序层次)的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode快速入门之第四节课: 区间法边界值分析

Leetcode快速入门之第五节课: 使用多指针+区间法解决链表问题

Leetcode快速入门之第八节课: 掌握链表数据移动的小诀窍

嵌入式Linux从入门到精通之第六节:shell脚本

嵌入式Linux从入门到精通之第六节:shell脚本

Leetcode快速入门之第二节课: 使用双指针+区间法解决数组问题