二叉树的层次遍历同时涉及到树和队列两种数据结构的操作,因此大厂很喜欢用来作为面试的热身题。作者不少去腾讯的小伙伴,都反映,这种题一定要非常熟练,不然会被直接pass。

1 题目描述

给定一个二叉树,按照层级进行遍历,在每一层中,从左到右进行遍历,并把每一层的元素放到一个数组中。

如下图所示:



2 题目分析

本题中,我们需要一层一层进行树节点的遍历,对此, 我们可以使用广度优先遍历(BFS)来实现。

在遍历一层时,我们同时需要将下一层的节点存储起来,以便可以迭代遍历。这时,用先进先出队列来存储就会非常的方便。

我们的算法遵循如下步骤:

  • 1 将root放入队列
  • 2 迭代访问队列,直到队列为空
  • 3 在每次迭代时,首先确定队列中元素个数,不妨称为levelSize。表示在即将访问的层次中共有levelSize个元素
  • 4 依次访问这levelSize个元素,将它们放入一个数组中,同时将它们从队列中移除
  • 5 移除每个元素时,讲它的子节点加入队列中
  • 6 如果队列非空,则回到3,继续访问下一层次的节点

动画展示:

3 代码实现

from collections import deque

class TreeNode:def __init__(self, val):    self.val = val    self.left, self.right = None, None

def traverse(root):  result = []if root is None:return result

  queue = deque()  queue.append(root)while queue:    levelSize = len(queue)    currentLevel = []for _ in range(levelSize):      currentNode = queue.popleft()# 将节点添加到数组中      currentLevel.append(currentNode.val)# 将节点的子节点添加到队列中if currentNode.left:        queue.append(currentNode.left)if currentNode.right:        queue.append(currentNode.right)

    result.append(currentLevel)

return result

往期精彩回顾

【送书!】最佳算法入门书籍

【面霸之路】双指针和滑动窗口结合

双指针问题最简单的教程(1)

滑动窗口算法最简单的教程(1)

二叉树的层次遍历_【腾讯面试热身题】二叉树层次遍历(动画展示)相关推荐

  1. next数组_【阿里面试热身题】数组去重(动画展示)

    今天这道双指针题目特征非常明显,就是数据挪移.这类问题,通常需要一个指针扫描全局,确定哪个元素要被挪移,另一个指针用来维护能够接纳元素的地址. 1 举个栗子 给定一个升序排列的数组,请将其中重复的字符 ...

  2. Mysql面试热身题集总结

    文章目录 前言 1.热身题实践 其他 前言 一直有个想法:把面试需要的知识点全都总结一下,包括数据库,语言,算法,数据结构等知识,形成一个面试总结笔记,这样以后面试的时候只看这些文章回顾下就行了.今天 ...

  3. 二叉树的建立与遍历完整代码_腾讯面试官这样问我二叉树,我刚好都会

    前记 上周我投递出了简历,岗位是后端开发工程师.这周腾讯面试官给我进行了视频面试.面试过程中他问了二叉树的问题. 二叉树相关算法题,在面试中出现的次数非常非常多,所以我面试之前也有所准备.今天结合面试 ...

  4. 用c语言实现二叉树的三种遍历_利用循环和递归实现二叉树的三种遍历

    一.前序遍历 遍历的过程为:首先访问根节点,再前序访问其左子树,再前序访问其右子树. 输入二叉树: 正确答案为: [1,3,4,43,3,2,2,2,42] 递归实现: void 输出:[1,3,4, ...

  5. 2023腾讯面试真题:

    ​[腾讯]面试真题: 面试前需要准备: 1. Java 八股文:了解常考的题型和回答思路: 2. 算法:刷 100-200 道题,记住刷题最重要的是要理解其思想,不要死记硬背,碰上原题很难,但 大多数 ...

  6. map迭代器遍历_一口气写了 HashMap 的 7种遍历方式,被同事夸了

    随着 JDK 1.8 Streams API 的发布,使得 HashMap 拥有了更多的遍历的方式,但应该选择那种遍历方式?反而成了一个问题. 本文先从 HashMap 的遍历方法讲起,然后再从性能. ...

  7. 腾讯python面试总结_腾讯面试总结(深圳总部)

    前言:收到在腾讯官网上面投递的腾讯的电话一面,和往常的电话面试一样,但是这个电话面试官好像很忙,而且也没有让我做自我介绍,上来直接来面我,也不问工程实践的内容,也不问有没有做过项目,估计就看一下简历就 ...

  8. tomcat线程循环异常终止_腾讯面试官:如何停止一个正在运行的线程?我一脸蒙蔽。。。...

    1. 停止不了的线程 2. 判断线程是否停止状态 3. 能停止的线程--异常法 4. 在沉睡中停止 5. 能停止的线程---暴力停止 6.方法stop()与java.lang.ThreadDeath异 ...

  9. url过滤怎么解除_腾讯面试官是这样来问布隆过滤器的?

    作者:张振伟来源:https://zhangzw.com/20190521.html 假设遇到这样一个问题:一个网站有 20 亿 url 存在一个黑名单中,这个黑名单要怎么存?若此时随便输入一个 ur ...

最新文章

  1. 长相酷似小强的小米「铁蛋」机器狗,售价 9999 元,打滚唱跳会空翻
  2. 一部分 数据 迁移_软件测试员12小时惊魂记:数据库迁移出大事故,如何测试?...
  3. micropython 网络驱动_network_网卡驱动
  4. 多台电脑共用一个耳机、音箱
  5. 树和二叉树【数据结构】
  6. MaxCompute MapReduce
  7. chrome浏览器安装vue调试插件dev-tools
  8. 详解 $_SERVER 函数中QUERY_STRING和REQUEST_URI区别
  9. qtcpserver无法启动监听_EOS基础全家桶(四)启动节点
  10. 敏感词的字典树匹配(lua版)
  11. Java 开发必看的 5个 Github 开源项目
  12. 科创人·优锘科技COO孙岗:错误问题找不到正确答案,求索万物可视的大美未来
  13. 动词ing基本用法_动词ing的几种常见用法
  14. SHOPEX快递单号查询插件圆通V8.2专版
  15. 1微秒等于多少皮秒_皮秒(ps)是一个时间单位。它是这样换算的↓1秒s_圈子-新氧美容整形...
  16. javaScript字符串比较
  17. 面试题------Spring中Bean的初始化以及销毁init-method、destory-method
  18. python+opencv3生成一个自定义纯色图
  19. codeforces 1567 C. Carrying Conundrum
  20. Android音频子系统(十一)------耳机返听(耳返)原理实现

热门文章

  1. WeChat授权Token验证体系:用token来隐藏微信用户的openid不用用户名与密码了, 与cookie与session很相似
  2. java中spring的注解_spring中的各种注解解析
  3. 2008matlab error 95,VS2008和MATLAB2010b混合编程有关问题 error LINK2028 恳请指教!(2)
  4. cmd中操作mysql_Windows中cmd操作mysql
  5. mysql 讲义_MySQL 讲义
  6. 用sqlyog怎么设置mysql自动备份,利用sqlyog配置MySQL自动备份sql文件
  7. 怎么用python编贪吃蛇_少儿编程分享:手把手教你用PYTHON编写贪吃蛇(二)
  8. android 闹钟服务,如果闹钟时间已经过去,android可以防止即时触发闹钟服务
  9. php 开启mail函数 wo,php mail 函数发送邮件
  10. pycharm创建mysql项目_python+Django+pycharm+mysql 搭建首个web项目详解