小白水平理解面试经典题目LeetCode 102 Binary Tree Level Order Traversal【二叉树】

102. 二叉树层次顺序遍历

小白渣翻译

给定二叉树的 root ,返回其节点值的层序遍历。 (即从左到右,逐级)。

例子

在这里插入图片描述

小白教室做题

在大学某个自习的下午,小白坐在教室看到这道题。想想自己曾经和白月光做题,现在大过年的,也是只有自己练题了。真是若对黄花孤负酒,怕黄花,也笑人岑寂。

这时候黑长直女神过来问:小白,你复习到二叉树了吗,这道题你有什么思路啊?

小白内心镇定:这机会不就来了吗,小美,《热辣滚烫》有机会一起去看看吧?
在这里插入图片描述
哦,不是,题目描述意思说的简单一些。

这种题目我们首先把他进行下条件梳理

  1. 树类的题目,我们首先要对树结构和BFS(广度优先搜索),DFS(深度优先搜索)有一定了解哈。
  2. 另外,熟悉了算法后,我们对于Queue(队列)也要相对熟悉下,这样能更加方便的解题。

那么,对于这道题来说,Binary Tree Level Order Traversal,也就是二叉树的层序遍历,顾名思义,就是按照从上到下、从左到右的顺序遍历二叉树中的所有节点。我们可以使用广度优先搜索(BFS)算法来实现层序遍历。

其中,BFS算法的基本思路是:

1.将根节点加入队列中。

2.循环执行以下操作,直到队列为空:

  • 从队列中取出一个节点
  • 将该节点的值加入到结果列表中
  • 将该节点的左右子节点(如果存在)加入到队列中

小美:小伙子,可以啊,这不仅逻辑感人,阅读理解也有俩下子!不过电影票要你买单哦。

小白:没问题,谁叫为了“真爱”呢。
在这里插入图片描述

真正面试环节

面试官:你可以解答这道”二叉树层级循序遍历“的题目吗,来看看你对树结构的理解。

小白:嘿嘿,这不巧了么这不是。
在这里插入图片描述

public List<List<Integer>> levelOrder(TreeNode root) {// 定义一个 List<List<Integer>> 类型的结果列表 result,用于存储层序遍历的结果。List<List<Integer>> result = new ArrayList<>();if (root == null) {return result;}// 创建一个队列 queue,用于存储待遍历的节点。Queue<TreeNode> queue = new LinkedList<>();// 将根节点 root 加入到队列 queue 中。queue.offer(root);// 循环执行以下操作,直到队列 queue 为空:// 从队列 queue 中取出一个节点 node// 将节点 node 的值加入到结果列表 result 中// 将节点 node 的左右子节点(如果存在)加入到队列 queue 中while (!queue.isEmpty()) {int size = queue.size();List<Integer> level = new ArrayList<>();for (int i = 0; i < size; i++) {TreeNode node = queue.poll();level.add(node.val);if (node.left != null) {queue.offer(node.left);}if (node.right != null) {queue.offer(node.right);}}result.add(level);}return result;}

小明:OK,完事儿,等着面试官来表扬自己吧。他肯定会说:小子,你是个好手!工位都给你准备好了,工资你说了算。

面试官:矮油,不错啊,不过你这能不能写个测试啊。

小明OS:今年这个找工市场,人言洛阳花似锦,偏我来时不逢春。。。不是,怎么还让我些test case 啊!

public static void main(String[] args) {// 创建二叉树TreeNode root = new TreeNode(3);root.left = new TreeNode(9);root.right = new TreeNode(20);root.right.left = new TreeNode(15);root.right.right = new TreeNode(7);// 创建BinaryTreeLevelOrderTraversal对象并调用levelOrderBinaryTreeLevelOrderTraversal solution = new BinaryTreeLevelOrderTraversal();List<List<Integer>> traversalResult = solution.levelOrder(root);// 输出结果System.out.println(traversalResult);
}

小白:您好,面试官,这回可以了吧,我终于有钱请小美看电影了!
在这里插入图片描述

============================================================================
🍀🍀🍀🍀🍀🍀更多算法题解请看 面试数据结构与算法总结分类+leetcode目录【基础版】
编码道路漫漫,只要先看脚下的路,徐徐前进即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/466371.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多机多卡运行nccl-tests和channel获取

nccl-tests 环境1. 安装nccl2. 安装openmpi3. 单机测试4. 多机测试mpirun多机多进程多节点运行nccl-testschannel获取 环境 Ubuntu 22.04.3 LTS (GNU/Linux 5.15.0-91-generic x86_64)cuda 11.8 cudnn 8nccl 2.15.1NVIDIA GeForce RTX 4090 *2 1. 安装nccl #查看cuda版本 nv…

Ubuntu Desktop - Screenshot (截图工具)

Ubuntu Desktop - Screenshot [截图工具] 1. Search your computer -> Screenshot -> Lock to Launcher2. gnome-screenshot3. System Settings -> Keyboard -> ShortcutsReferences 1. Search your computer -> Screenshot -> Lock to Launcher 2. gnome-s…

BUGKU-WEB 滑稽

题目描述 没啥好说的&#xff0c;直接启动场景吧&#xff1a; 解题思路 花里胡哨的界面&#xff08;js效果&#xff09;&#xff0c;有啥用呢&#xff1f;直接看源码吧&#xff08;ctrlu&#xff09;&#xff1a; 相关工具 略 解题步骤 ctrlu&#xff0c;发现在注释中直…

【制作100个unity游戏之25】3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱1(附带项目源码)

效果演示 文章目录 效果演示系列目录前言人物和视角基本控制简单的背包系统和物品交互绘制背包UI脚本控制 源码完结 系列目录 前言 欢迎来到【制作100个Unity游戏】系列&#xff01;本系列将引导您一步步学习如何使用Unity开发各种类型的游戏。在这第25篇中&#xff0c;我们将…

Go高级并发模式

Go对并发提供了强大的原生支持&#xff0c;本文讨论Go的高级并发模式&#xff0c;理解这些并发模式&#xff0c;可以帮助我们编写高效的Go应用程序。原文: Advanced Concurrency Patterns in Go "并发不是并行&#xff0c;但使并行成为可能。" —— Rob Pike 本文将深…

android中实现设备尺寸适配

1、引言 设备尺寸适配的重要性想必就不用我多说了&#xff0c;在我发布的历史文章中我曾谈过Qt中的设备尺寸适配问题&#xff0c;那这里我就来教大家如何在android中做设备尺寸适配。在android中设备尺寸适配的方式有好几种&#xff0c;但我喜欢的还是使用获取设备真实尺寸然后…

就业|高校毕业生就业信息小程序|基于微信小程序的高校毕业生就业信息的设计与实现(源码+数据库+文档)

高校毕业生就业信息小程序目录 目录 基于微信小程序的高校毕业生就业信息的设计与实现 一、前言 二、系统功能设计 三、系统实现 1、用户小程序模块 2、用户信息管理 2、职位招聘管理 3、公司信息管理 4、论坛信息管理 四、数据库设计 1、实体ER图 五、核心代码 …

C语言学习记录

牛牛的第二个整数_牛客题霸_牛客网 (nowcoder.com) 注意输入的格式&#xff0c;%d空格%d空格%d

数据结构第十四天(树的存储/双亲表示法)

目录 前言 概述 接口&#xff1a; 源码&#xff1a; 测试函数&#xff1a; 运行结果&#xff1a; 往期精彩内容 前言 孩子&#xff0c;一定要记得你的父母啊&#xff01;&#xff01;&#xff01; 哈哈&#xff0c;今天开始学习树结构中的双亲表示法&#xff0c;让孩…

C++重新入门-C++ 函数

函数是一组一起执行一个任务的语句。每个 C 程序都至少有一个函数&#xff0c;即主函数 main() &#xff0c;所有简单的程序都可以定义其他额外的函数。 您可以把代码划分到不同的函数中。如何划分代码到不同的函数中是由您来决定的&#xff0c;但在逻辑上&#xff0c;划分通常…

【JAVA-Day76】Java线程解析:三态和五态

Java线程解析&#xff1a;三态和五态 《Java线程状态深度解析&#xff1a;三态和五态探秘 &#x1f60e;》摘要引言一、什么是三态 &#x1f60a;二、什么是五态 &#x1f603;三、五态之间如何转变3.1 新建状态转换到运行状态3.2 运行状态转换到阻塞状态3.3 运行状态转换到等待…

为什么Python是数据科学家的首选语言

这篇文章全面探讨了Python作为数据科学领域首选语言的原因。从Python的历史、特性&#xff0c;到在数据科学中的应用实例&#xff0c;再到与其他数据科学语言的比较&#xff0c;以及在实际企业中的应用&#xff0c;我们深入剖析了Python的优势与挑战&#xff0c;最后对Python的…