二叉树的层次遍历_【腾讯面试热身题】二叉树层次遍历(动画展示)
二叉树的层次遍历同时涉及到树和队列两种数据结构的操作,因此大厂很喜欢用来作为面试的热身题。作者不少去腾讯的小伙伴,都反映,这种题一定要非常熟练,不然会被直接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)
二叉树的层次遍历_【腾讯面试热身题】二叉树层次遍历(动画展示)相关推荐
- next数组_【阿里面试热身题】数组去重(动画展示)
今天这道双指针题目特征非常明显,就是数据挪移.这类问题,通常需要一个指针扫描全局,确定哪个元素要被挪移,另一个指针用来维护能够接纳元素的地址. 1 举个栗子 给定一个升序排列的数组,请将其中重复的字符 ...
- Mysql面试热身题集总结
文章目录 前言 1.热身题实践 其他 前言 一直有个想法:把面试需要的知识点全都总结一下,包括数据库,语言,算法,数据结构等知识,形成一个面试总结笔记,这样以后面试的时候只看这些文章回顾下就行了.今天 ...
- 二叉树的建立与遍历完整代码_腾讯面试官这样问我二叉树,我刚好都会
前记 上周我投递出了简历,岗位是后端开发工程师.这周腾讯面试官给我进行了视频面试.面试过程中他问了二叉树的问题. 二叉树相关算法题,在面试中出现的次数非常非常多,所以我面试之前也有所准备.今天结合面试 ...
- 用c语言实现二叉树的三种遍历_利用循环和递归实现二叉树的三种遍历
一.前序遍历 遍历的过程为:首先访问根节点,再前序访问其左子树,再前序访问其右子树. 输入二叉树: 正确答案为: [1,3,4,43,3,2,2,2,42] 递归实现: void 输出:[1,3,4, ...
- 2023腾讯面试真题:
[腾讯]面试真题: 面试前需要准备: 1. Java 八股文:了解常考的题型和回答思路: 2. 算法:刷 100-200 道题,记住刷题最重要的是要理解其思想,不要死记硬背,碰上原题很难,但 大多数 ...
- map迭代器遍历_一口气写了 HashMap 的 7种遍历方式,被同事夸了
随着 JDK 1.8 Streams API 的发布,使得 HashMap 拥有了更多的遍历的方式,但应该选择那种遍历方式?反而成了一个问题. 本文先从 HashMap 的遍历方法讲起,然后再从性能. ...
- 腾讯python面试总结_腾讯面试总结(深圳总部)
前言:收到在腾讯官网上面投递的腾讯的电话一面,和往常的电话面试一样,但是这个电话面试官好像很忙,而且也没有让我做自我介绍,上来直接来面我,也不问工程实践的内容,也不问有没有做过项目,估计就看一下简历就 ...
- tomcat线程循环异常终止_腾讯面试官:如何停止一个正在运行的线程?我一脸蒙蔽。。。...
1. 停止不了的线程 2. 判断线程是否停止状态 3. 能停止的线程--异常法 4. 在沉睡中停止 5. 能停止的线程---暴力停止 6.方法stop()与java.lang.ThreadDeath异 ...
- url过滤怎么解除_腾讯面试官是这样来问布隆过滤器的?
作者:张振伟来源:https://zhangzw.com/20190521.html 假设遇到这样一个问题:一个网站有 20 亿 url 存在一个黑名单中,这个黑名单要怎么存?若此时随便输入一个 ur ...
最新文章
- 长相酷似小强的小米「铁蛋」机器狗,售价 9999 元,打滚唱跳会空翻
- 一部分 数据 迁移_软件测试员12小时惊魂记:数据库迁移出大事故,如何测试?...
- micropython 网络驱动_network_网卡驱动
- 多台电脑共用一个耳机、音箱
- 树和二叉树【数据结构】
- MaxCompute MapReduce
- chrome浏览器安装vue调试插件dev-tools
- 详解 $_SERVER 函数中QUERY_STRING和REQUEST_URI区别
- qtcpserver无法启动监听_EOS基础全家桶(四)启动节点
- 敏感词的字典树匹配(lua版)
- Java 开发必看的 5个 Github 开源项目
- 科创人·优锘科技COO孙岗:错误问题找不到正确答案,求索万物可视的大美未来
- 动词ing基本用法_动词ing的几种常见用法
- SHOPEX快递单号查询插件圆通V8.2专版
- 1微秒等于多少皮秒_皮秒(ps)是一个时间单位。它是这样换算的↓1秒s_圈子-新氧美容整形...
- javaScript字符串比较
- 面试题------Spring中Bean的初始化以及销毁init-method、destory-method
- python+opencv3生成一个自定义纯色图
- codeforces 1567 C. Carrying Conundrum
- Android音频子系统(十一)------耳机返听(耳返)原理实现
热门文章
- WeChat授权Token验证体系:用token来隐藏微信用户的openid不用用户名与密码了, 与cookie与session很相似
- java中spring的注解_spring中的各种注解解析
- 2008matlab error 95,VS2008和MATLAB2010b混合编程有关问题 error LINK2028 恳请指教!(2)
- cmd中操作mysql_Windows中cmd操作mysql
- mysql 讲义_MySQL 讲义
- 用sqlyog怎么设置mysql自动备份,利用sqlyog配置MySQL自动备份sql文件
- 怎么用python编贪吃蛇_少儿编程分享:手把手教你用PYTHON编写贪吃蛇(二)
- android 闹钟服务,如果闹钟时间已经过去,android可以防止即时触发闹钟服务
- php 开启mail函数 wo,php mail 函数发送邮件
- pycharm创建mysql项目_python+Django+pycharm+mysql 搭建首个web项目详解