欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > 一起学习LeetCode热题100道(41/100)

一起学习LeetCode热题100道(41/100)

2025/3/14 5:48:48 来源:https://blog.csdn.net/weixin_53224223/article/details/141222746  浏览:    关键词:一起学习LeetCode热题100道(41/100)

41.二叉树的层序遍历(学习)

给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。

示例 1:
在这里插入图片描述
输入:root = [3,9,20,null,null,15,7]
输出:[[3],[9,20],[15,7]]

示例 2:
输入:root = [1]
输出:[[1]]

示例 3:
输入:root = []
输出:[]

提示:
树中节点数目在范围 [0, 2000] 内
-1000 <= Node.val <= 1000

解析:
一、函数输入: 接收一个二叉树的根节点root。

二、空树处理: 如果根节点为空,说明是空树,直接返回空数组[]。

三、初始化:
1.result:用于存储最终的层序遍历结果,每一层的结果作为一个数组存储在result中。
2.queue:用于进行层序遍历的队列,初始时将根节点加入队列。

四、层序遍历:
1.使用while循环进行层序遍历,条件是队列不为空。
2.在每一层开始时,通过queue.length获取当前层的节点数(即队列中剩余的元素数),记为levelSize。
3.初始化一个空数组currentLevel,用于存储当前层的节点值。
4.使用for循环遍历当前层的所有节点(即遍历levelSize次):
4.1.从队列中移除并获取当前节点currentNode。
4.2.将currentNode的值加入currentLevel数组。
4.3.如果currentNode有左子节点,则将左子节点加入队列。
4.4.如果currentNode有右子节点,则将右子节点加入队列。
5.遍历完当前层的所有节点后,将currentLevel数组加入result数组。

五、返回结果: 当队列为空时,所有节点都已遍历完毕,此时result数组中存储了完整的层序遍历结果,函数返回result。

var levelOrder = function (root) {if (!root) {return [];}let result = [];let queue = [root]; // 创建一个队列,初始时将根节点加入  while (queue.length > 0) {let levelSize = queue.length; // 当前层的节点数  let currentLevel = []; // 存储当前层的节点值  for (let i = 0; i < levelSize; i++) {let currentNode = queue.shift(); // 从队列中取出一个节点  currentLevel.push(currentNode.val); // 将节点值加入当前层的结果数组  // 如果左子节点存在,加入队列  if (currentNode.left) {queue.push(currentNode.left);}// 如果右子节点存在,加入队列  if (currentNode.right) {queue.push(currentNode.right);}}result.push(currentLevel); // 将当前层的结果加入最终结果数组  }return result;
};

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词