LeetCode—102.二叉树的层次遍历(Binary Tree Level Order Traversal)——分析及代码(C++)

news/2025/2/21 4:17:29

LeetCode—102.二叉树的层次遍历[Binary Tree Level Order Traversal]——分析及代码[C++]

  • 一、题目
  • 二、分析及代码
    • 1. 队列迭代
      • (1)思路
      • (2)代码
      • (3)结果
  • 三、其他

一、题目

给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。

例如:
给定二叉树: [3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7

返回其层次遍历结果:

[
  [3],
  [9,20],
  [15,7]
]

来源:力扣(LeetCode
链接:https://leetcode-cn.com/problems/binary-tree-level-order-traversal
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、分析及代码

1. 队列迭代

(1)思路

每层遍历次序一致,因此用队列记录树每一层的节点,逐层迭代。

(2)代码

class Solution {
public:
    vector<vector<int>> levelOrder(TreeNode* root) {
        if (root == NULL)
            return {};
        vector<vector<int>> ans;
        queue<TreeNode*> q;
        q.push(root);
        while (!q.empty()) {
            vector<int> res;
            int qsize = q.size();
            for (int i = 0; i < qsize; i++) {
                TreeNode* node = q.front();
                q.pop();
                res.push_back(node->val);
                if (node->left != NULL)
                    q.push(node->left);
                if (node->right != NULL)    
                    q.push(node->right);   
            }
            ans.push_back(res);
        }
        return ans;        
    }
};

(3)结果

执行用时 :4 ms, 在所有 C++ 提交中击败了 96.27% 的用户;
内存消耗 :13.7 MB, 在所有 C++ 提交中击败了 87.12% 的用户。

三、其他

暂无。


http://www.niftyadmin.cn/n/616618.html

相关文章

【Flink实战系列】Flink 是如何实现 exactly-once 语义的

Flink跟其他的流计算引擎相比,最突出或者做的最好的就是状态的管理.什么是状态呢?比如我们在平时的开发中,需要对数据进行count,sum,max等操作,这些中间的结果(即是状态)是需要保存的,因为要不断的更新,这些值或者变量就可以理解为是一种状态,拿读取kafka为例,我们需要记录数据…

LeetCode—104.二叉树的最大深度(Maximum Depth of Binary Tree)——分析及代码(C++)

LeetCode—104.二叉树的最大深度[Maximum Depth of Binary Tree]——分析及代码[C]一、题目二、分析及代码1. 递归&#xff08;1&#xff09;思路&#xff08;2&#xff09;代码&#xff08;3&#xff09;结果2. 队列迭代&#xff08;BFS&#xff09;&#xff08;1&#xff09;…

LeetCode—105.从前序与中序遍历序列构造二叉树(Construct Binary Tree from Preorder and Inorder Traversal)——分析及代码(C++)

LeetCode—105.从前序与中序遍历序列构造二叉树[Construct Binary Tree from Preorder and Inorder Traversal]——分析及代码[C]一、题目二、分析及代码1. 递归&#xff08;1&#xff09;思路&#xff08;2&#xff09;代码&#xff08;3&#xff09;结果2. 栈迭代&#xff08…

【Flink实战系列】Flink各种报错汇总及解决方案(实时更新中)

这篇文章主要用来记录一下Flink中常见的报错以及解决方案(后面会持续更新) 1,Table is not an append-only table. Use the toRetractStream() in order to handle add and retract messages. 这个是因为动态表不是append-only模式的,需要用toRetractStream(回撤流)处理就好了…

【Flink实战系列】Flink SQL 之 Retraction (回撤流)

什么是retraction(撤回) 通俗讲retract就是传统数据里面的更新操作,也就是说retract是流式计算场景下对数据更新的处理方式。 首先来看下流场景下的一个词频统计列子。 没有retract会导致最终结果不正确↑: 通过上面两个图可以很清楚的看到retract的作用,下面我们看一个…

spark on yarn模式安装和配置carbondata

本节将介绍如何在 Spark on YARN 模式的集群上安装和配置 CarbonData。carbondata1.5.1的编译可以看上一篇 版本:spark2.3.1,carbondata1.5.1 前置条件 Hadoop HDFS 和 Yarn 需要安装和运行。Spark 需要在所有的集群节点上安装并且运行。CarbonData 用户需要有权限访问 HDFS…

阿里正式向 Apache Flink 贡献 Blink 源码

个人的一些感悟: 今天是一个激动人心的时刻,阿里巴巴正式向Flink贡献了Blink的源码,这就意味着我们可以体验Blink的新功能了,阿里也一再强调Blink永远不会单独成为一个独立的开源项目来运作&#xff0c;他一定是Flink的一部分。后面Blink应该会和Flink主干的代码进行合并,也就…

【Flink实战系列】Flink累加器的使用(accumulator)

Flink的Accumulator即累加器,与Saprk Accumulator 的应用场景差不多,都能很好地观察task在运行期间的数据变化 可以在Flink job任务中的算子函数中操作累加器,但是只能在任务执行结束之后才能获得累加器的最终结果。spark的累加器用法. Flink中累加器的用法非常的简单: 1:…