【层序遍历】个人练习-Leetcode-102. Binary Tree Level Order Traversal

102. Binary Tree Level Order Traversal [easy] (Python) 题目链接https://leetcode.com/problems/binary-tree-level-order-traversal/题目原文 Given a binary tree, return the level order traversal of its nodes’ values. (ie, from left to right, level by level). For 阅读详情

题目链接:https://leetcode.cn/problems/binary-tree-level-order-traversal/description/

题目大意:给一棵树的根,要求以vector<vector<int>>形式给出层序遍历结果。

思路:层序遍历并不难,tricky的点在于(如果用c++)做的话,如何让第i层的结果放进res[i]里。因为单纯只用一个queue做层序遍历(其实就是BFS)的话,并不能区分哪个节点属于哪一层。

开始时想着一起记录深度,然后放进结果里。但结果数组要开多大呢?即使先开了2000,但有可能有些深度并没有数字,就变成空数组了,这样的结果也是不合法的。

看了题解才发现这个trick:按照轮次来pop queue,可以用这样的循环来保证这轮pop的刚好都是同一层。因为循环是递减的,i只被初始化一次,即使后面有新的节点被加入了queue,也不影响循环次数(这个次数一开始就被定好了,并且就是这一层的节点数量)。

			for (int i = q.size(); i > 0; i--) {
                auto parent = q.front();
                q.pop();
                tmp.push_back(parent->val);
                if (parent->left != nullptr) 
                    q.push(parent->left);
                if (parent->right != nullptr)
                    q.push(parent->right);
            }

完整代码

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    vector<vector<int>> levelOrder(TreeNode* root) {
        vector<vector<int>> res;
        queue<TreeNode*> q;
        if (root != nullptr)
            q.push(root);
 
        while (!q.empty()) {
            vector<int> tmp;
            for (int i = q.size(); i > 0; i--) {
                auto parent = q.front();
                q.pop();
                tmp.push_back(parent->val);
                if (parent->left != nullptr) 
                    q.push(parent->left);
                if (parent->right != nullptr)
                    q.push(parent->right);
            }
            res.push_back(tmp);
        }

        return res;
    }
};
FreeCAD源码分析:Sketcher模块 Sketcher模块基于Part模块功能实现了特征编辑(Feature Editing)建模的功能。这类参数化建模系统主要包括几何表示、约束求解器等两大组成部分。 阅读详情

相关推荐

2025华为杯第二十二届中国研究生数学建模竞赛E题:高速列车轴承智能故障诊断问题 - 完整解题分析+完整MATLAB源码!

🎓 本文收录于 《滚雪球学数学建模》专栏,本专栏专注于从零基础出发,带你循序渐进掌握数学建模的核心方法与思维路径。通过“滚雪球式”学习法,从最简单的生活化案例到经典建模工具,再到省赛、国赛真题实战演练,逐步积累知识与技能,帮助你搭建完整的建模体系。无论你是刚接触建模的新生,还是希望提升科研与竞赛能力的学者与工程师,本专栏都将为你提供一条清晰、高效、可实操的建模成长路线,助力你快速进阶,突破难点,迈向数学建模竞赛与实际应用的更高峰 🚀!

**My Coding Family** 1602

LeetCode】103. Binary Tree Zigzag Level Order Traversal 解题报告

转载请注明出处:http://blog.csdn.net/crazy1235/article/details/51471280Subject 出处:https://leetcode.com/problems/binary-tree-zigzag-level-order-traversal/ Given a binary tree, return the zigzag level ord

crazy_jack 9847

mql5_chinese_mt5_mql5_mql5帮助文档_中文_

MQL5语言参考包括函数,操作,关键字和分为几类的其他语言架构。该参考还提供了用于开发交易策略、控制面板、自定义图形和启用文件访问的标准程序库类的描述。另外,代码库还包含了ALGLIB数值分析库,可被用于解决各种数学问题。

LeetCode 102. Binary Tree Level Order Traversal 题解

本题是二叉树遍历的经典问题,主要考察对广度优先搜索和深度优先搜索的理解和应用。广度优先搜索:层次清晰,直接按照层次顺序处理节点,代码逻辑直观。深度优先搜索:通过递归实现,代码简洁,但需要额外记录深度信息。在实际应用中,广度优先搜索通常是解决层序遍历问题的首选方法,因为它天然适合按照层次顺序处理节点。而深度优先搜索则在其他类型的树遍历问题中更为常用。无论是哪种方法,掌握二叉树的遍历技巧对于解决树相关的算法问题都非常重要。

cannonjinx的博客 691

LeetCode(102)Binary Tree Level Order Traversal

题目如下: Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level). For example: Given binary tree {3,9,20,#,#,15,7}, 3 / \ 9 20

BUILD 2575

LeetCode102. Binary Tree Level Order Traversal 解题报告

转载请注明出处:http://blog.csdn.net/crazy1235/article/details/51477967Subject 出处:https://leetcode.com/problems/binary-tree-level-order-traversal/ Given a binary tree, return the level order traversal of its

crazy_jack 5289

LeetCode 102. 二叉树的层序遍历 Binary Tree Level Order Traversal(广度优先搜索)

102. 二叉树的层序遍历给你一个二叉树,请你返回其按 层序遍历 得到的节点值。(即逐层地,从左到右访问所有节点)。示例:二叉树:[3,9,20,null,null,15,7], 3 /...

AI天才研究院 8877

leetcode102 Binary Tree Level Order Traversal(二叉树的层序遍历)

题目要求 给定一个二叉树,返回节点值的层序遍历结果。 (tips:从左到右,一层一层) 输入示例 For example: Given binary tree [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 return its level order traversal as: [ [3], [9,20],...

爱喝舒化奶的博客 430

LeetCode102Binary Tree Level Order Traversal

题目Given a binary tree, return the level order traversal of its nodes’ values. (ie, from left to right, level by level).For example: Given binary tree {3,9,20,#,#,15,7} return its level order traver

指尖飞舞 1282

力扣(合并区间)

给定一组可能重叠或相邻的整数区间,合并所有重叠或端点相接的区间,返回不重叠的最小区间列表。例如输入 [[1,3],[2,6],[8,10],[15,18]],输出 [[1,6],[8,10],[15,18]]。核心是先按左端点升序排序,再单次线性扫描完成合并,避免暴力两两比较。

weixin_52811458的博客 300

LeetCode 155. 最小栈|Python 解法详解

这道题的关键是:使用主栈保存数据,辅助栈在每一层同步保存“截至当前位置的最小值”。理解这一点后,再结合边界条件检查,代码就能保持清晰且稳定。

a1250467048的博客 238

LeetCode //MySQL - 1204. Last Person to Fit in the Bus

This SQL query solves the problem of finding the last person who can board a bus without exceeding the 1000 kg weight limit. The solution involves: Calculating a running total of weights ordered by boarding turn using a window function Filtering to only in

Made in Code 370

LeetCode 1. 两数之和 | 从暴力枚举到哈希表最优解 + 空间换时间思想全复盘

文章摘要 题目要求在数组中找到两数之和等于目标值的下标。核心思路是优化查找效率: 暴力法:双重循环枚举所有数对,时间复杂度O(n²),效率低但易实现。 哈希表优化:利用哈希表O(1)查找特性,遍历时存储已访问元素,每次计算差值并查询,时间复杂度降至O(n)。关键细节是先查后存,避免自匹配。 代码实现:哈希表法通过一次遍历完成,空间换时间,边界处理需注意空数组和不足两元素的情况。 常见错误:内层循环起始点、哈希表键值设计、立即返回结果等易错点需警惕。 面试要点:优先选择哈希表解法,解释与暴力法的差异,强调时间

yc2284238579的博客 258

leetcode】153. 寻找旋转排序数组中的最小值js

本文介绍了在旋转排序数组中寻找最小值的二分查找算法。通过比较中间元素与数组末尾元素,可以确定最小值所在区间:若中间值大于末尾值,则最小值在右侧;否则在左侧或当前位置。文章提供了两种实现方式,第一种通过样例总结返回nums[l],第二种采用更标准的二分写法,确保循环结束时left==right。两种方法时间复杂度均为O(logn),适用于解决LeetCode相关题目。关键点在于利用旋转数组的特性缩小搜索范围。

2402_83244812的博客 150

LeetCode //C - 1203. Sort Items by Groups Respecting Dependencies

This problem involves sorting items with group constraints and dependency relations. The key steps are: Assign unique groups to items with no group (-1) Build dependency graphs for both items and groups Perform topological sorting on both graphs If both so

Made in Code 375

LeetCode hot100——最大子数组和

给你一个整数数组nums,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。是数组中的一个连续部分。6连续子数组 [4,-1,2,1] 的和最大,为 6。nums = [1]123如果你已经实现复杂度为O(n)的解法,尝试使用更为精妙的求解。

weixin_42927227的博客 213

10.LeetCode算法习题讲解--滑动窗口--最大连续为一的个数

利用滑动窗口解决最大连续1的个数

Jammy_1的博客 221

栈和队列专题(三):LeetCode 622. 设计循环队列|数组环形复用 + front/rear 边界详解

本文详细讲解了循环队列的设计与实现,重点分析了如何利用数组实现环形结构以避免空间浪费。文章首先通过示例说明普通数组队列的"假溢出"问题,然后提出循环队列的解决方案。核心内容包括:1. 采用牺牲一个存储位置的方案区分队列空满状态;2. 明确front和rear指针的语义(front指向队首元素,rear指向下一个可插入位置);3. 使用取模运算实现下标的循环移动。文章完整实现了LeetCode 622题要求的全部接口,并分析了各种边界情况,特别是队尾元素的获取方法。最后对比了数组实现与链式

Luminousone的博客 472

LeetCode 3597.分割字符串

时间复杂度:O(n) 或 O(n∣Σ∣),其中 n 是 s 的长度,∣Σ∣=26 是字符集合的大小。空间复杂度:O(n) 或 O(n∣Σ∣)。只要当前段是唯一的,就将其加入段列表,标记为已经出现过,并从下一个下标开始构建新的段。因此,最终输出为 [“a”, “b”, “bc”, “c”, “cc”, “d”]。输出: [“a”,“b”,“bc”,“c”,“cc”,“d”]因此,最终输出为 [“a”, “aa”]。输入: s = “abbccccd”输入: s = “aaaa”输出: [“a”,“aa”]

tus00000的博客 223

LeetCode 1143:最长公共子序列——Java 二维动态规划详解

本文介绍 LeetCode 1143“最长公共子序列”的二维动态规划解法。通过定义 `dp[i][j]` 表示两个字符串相应前缀的最长公共子序列长度,分别推导当前字符相同与不同时的状态转移。文章结合 `"abcde"` 和 `"ace"` 完整填写 DP 表,并讲解数组初始化、下标映射、遍历顺序、Java 代码、复杂度及常见错误。

weixin_51228134的博客 282
上一篇: 【DFS】个人练习-Leetcode-LCS 03. 主题空间
下一篇: 【快慢指针】个人练习-Leetcode-142. Linked List Cycle II
Rstln
博客等级 码龄8年 118粉丝 · 190原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值