剑指 Offer 32 - II. 从上到下打印二叉树 II

sysrepo 开发者指南(一个基于libyang与支持rpc的数据库) sysrepo 开发者指南(一个基于libyang与支持rpc的数据库) 日志记录 默认情况下,所有 Sysrepo 日志记录都处于关闭状态。如果启用,日志消息有 3 种输出。它们可以写入stderr、由 处理syslog或简单地传递给回调。 请务必注意,启用 Sysrepo 日志记录也会修改libyang日志记录设置。错误消息被视为标准 Sysrepo 错误,其他严重性较低的消息完全隐藏。要更改此行为,只需在启用 Sysrepo 日志记录后调整libyang日志记录设置。 此外,几乎每个 Sysrepo 阅读详情

题目链接:力扣

 

 我的代码:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    int _level(TreeNode* root)
    {
        if(root == NULL)
            return 0;
        int h1 = _level(root->left);
        int h2 = _level(root->right);
        return h1 > h2 ? h1 + 1 : h2 + 1;
    }
    void _levelOrder(TreeNode* root,vector<vector<int>>& vv, int index)
    {
        if(root == NULL)
        {
            return;
        }
        vv[index].push_back(root->val);
        _levelOrder(root->left, vv, index + 1);
        _levelOrder(root->right, vv, index + 1);

    }
    vector<vector<int>> levelOrder(TreeNode* root) {
        vector<vector<int>> vv;
        if(root == NULL)
            return vv;
        int i = 0;
        //计算二叉树的深度
        int h = _level(root);
        vv.resize(h);
        _levelOrder(root, vv, i);
     
        return vv;
    }
};

 整体思路很简单,为了知道返回顺序表的大小,先遍历一遍二叉树,算出二叉树的深度,然后再扩容,然后再遍历一遍二叉树,进行广度优先搜索将数据放进顺序表中。

这是我最开始想到的思路,这种写法有很多的缺点:

最明显的缺点是:

两次遍历二叉树都使用的是递归方法,如果二叉树层数过多,递归层数太深,很容易爆栈

看了官方的代码这种对比更加明显

class Solution {
public:
    vector<vector<int>> levelOrder(TreeNode* root) {
        vector <vector <int>> ret;
        if (!root) {
            return ret;
        }

        queue <TreeNode*> q;
        q.push(root);
        while (!q.empty()) {
            int currentLevelSize = q.size();
            ret.push_back(vector <int> ());
            for (int i = 1; i <= currentLevelSize; ++i) {
                auto node = q.front(); q.pop();
                ret.back().push_back(node->val);
                if (node->left) q.push(node->left);
                if (node->right) q.push(node->right);
            }
        }
        
        return ret;
    }
};

 官方写法借助了队列的性质,将每一层的数据分别入队列,等待下一层循环时将数据顺序表,而且 ret.push_back(vector <int> ());这一句代码我感觉很赞,这样可以避免像我一样先算出二叉树的深度,一次遍历二叉树就是O(N)的时间消耗,而且,这种方法用的是循环的方法,避免了函数调用的时间消耗,而且的循环没有递归层数太多栈溢出的可能。

一文了解ECU软件刷写的2种方法:Bootloader刷写和调试器刷写 分为刷写前、刷写中和刷写后三个阶段,如下示意:下面我们来详细了解一下Bootloader收到外部请求后开始刷写的三个阶段1)刷写前进行刷写的准备,一是确保刷写阶段总线通信的稳定性,二是避免刷写阶段出现非预期的故障,三是读取车辆数据供刷写前的一些检查等,如下所示:首先进行会话控制,通过功能寻址方式进入扩展会话模式,为后面的信息访问及其他指令做准备;然后检查刷写的前提条件,通过物理寻址方式发送历程控制请求。比如车确实处于静止状态,供电电压稳定等条件下才允许刷写; 阅读详情

相关推荐

【YOLO部署Android安卓手机APP】YOLOv8部署到安卓实时目标检测识别——官方/自训练模型YOLOv8人脸/车辆等目标检测(可自定义更换其他目标)

本文首先讲解如何直接使用官方训练好的模型部署到手机APP进行人脸检测,然后讲解如何修改其他目标进行检测,以车辆检测为例进行讲解如何训练自己的模型部署到手机APP。本文为详细设计/配置文档,包含完整所需的环境配置搭建,项目工程配置步骤等,手把手记录使用pycharm和Android studio的工程开发过程,实现YOLO部署到安卓。实战开发,亲测无误。本项目实现了人脸检测和车辆检测,当然,以此你可以按照本项目开发步骤扩展更换为其他目标进行检测,例如更换为车牌、手势、人脸面部活动、人脸表情、火焰烟雾、行人等

嵌入式阿齐Archie 1万+

二叉树层序遍历的几个力扣例题

层序遍历的几个例题

the_singular的博客 1847

数据资产入表——解读100页数据资产入表解读与分析【附全文阅读】

本文档《数据资产入表:解读与分析》面向企业财务、数据管理、法务合规及高管等核心岗位,系统解析数据资产入表全流程。以"政策-实操-价值"为主线,首先解读入表政策要求,明确会计处理规范;其次详细拆解数据盘点、治理、确权、评估等实操步骤,提供行业案例参考;最后分析入表难点及后续运营策略,为企业提供从政策理解到落地执行的一站式解决方案。

cdfunlove的博客 368

leetcode之二叉树遍历

前言 二叉树遍历,一般分为广度优先遍历(BFS)和深度优先遍历(DFS),其中深度优先遍历---前中后序遍历,一条道走到黑,前中后序遍历大部分会用到递归的方式,当然也会用非递归的栈的方式来实现,只不过非递归的时间复杂度更高;广度优先遍历---层次遍历,依赖队列的方式来实现; // 1 // / \ // 2 3 // / \ \ //4 5 6 // 前序遍历顺序:[1 2 4 5 3 6] // 中序遍历顺序:[4 2 5 1 3 6] // 后序遍历顺序:[4 5 2...

panxiying1993的博客 534

LeetCode 102.二叉树的层序遍历(C++广度优先+辅助队列

广度优先搜索(辅助队列)思路: 以此类推… class Solution { public: vector<vector<int>> levelOrder(TreeNode* root) { vector <vector <int>> ret;//二维数组 if (!root) { return ret; } queue <TreeNode.

伍粟的博客 323

中序遍历二叉树迭代方法

class Solution { public: vector<int> inorderTraversal(TreeNode* root) { vector<int> res; TreeNode *predecessor = nullptr; while (root != nullptr) { if (root->left != nullptr) { // pred

Zczera的博客 465

leetcode每日一练-第102题-二叉树的层序遍历

通过广度优先搜索(BFS)的方式,按层遍历二叉树节点,并将每层的节点值保存在一个一维数组中,然后再将所有的一维数组存储在二维数组中,最后返回二维数组作为层序遍历的结果。BFS(广度优先搜索)和DFS(深度优先搜索)是两种。,它们在搜索问题中有不同的应用和特点。寻找所有可能的路径或找到特定路径。适用于树或图中需要按层遍历节点。常见的图和树遍历算法。栈数据结构(或递归)

weixin_48820672的博客 540

leetcode 剑指 Offer 32 - II. 从上到下打印二叉树 II

leetcode 剑指 Offer 32 - II. 从上到下打印二叉树 II

TrueDei 850

剑指 Offer 32 - II. 从上到下打印二叉树 II - 力扣(LeetCode)

剑指 Offer 32 - II. 从上到下打印二叉树 II - 力扣(LeetCode)

Onwaier的博客 623

LeetCode | 面试题32 - II. 从上到下打印二叉树 II剑指Offer】【Python】

LeetCode 面试题32 - II. 从上到下打印二叉树 II剑指Offer】【Easy】【Python】【二叉树】【BFS】

Wonz 687

剑指 Offer 32 - II. 从上到下打印二叉树 II JavaScript 实现

剑指 Offer 32 - II. 从上到下打印二叉树 II JavaScript 实现问题描述代码 问题描述 从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / 9 20 / 15 7 返回其层次遍历结果: [ [3], [9,20], [15,7] ] 代码 var levelOrder = function(root) { if (!root) return [];

ryyzxf的博客 220

每日一题 - 剑指 Offer 32 - II. 从上到下打印二叉树 II

每日一题 - 剑指 Offer 32 - II. 从上到下打印二叉树 II 题目信息 时间: 2019-06-25 题目链接:Leetcode tag: 队列 BFS 难易程度:简单 题目描述: 从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。 示例1: 给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回其层次遍历结果: [ [3], [9,20

一只小菜鸡的博客 161

Leetcode刷题笔记——剑指 Offer 32 - II. 从上到下打印二叉树 II(简单)

Leetcode刷题笔记——剑指 Offer 32 - II. 从上到下打印二叉树 II(简单)题目描述方法一:层序遍历BFS复杂度分析C++代码参考链接 题目描述 从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。 例如: 给定二叉树: [3,9,20,null,null,15,7],返回其层次遍历结果: [ [3], [9,20], [15,7] ] 方法一:层序遍历BFS I. 按层打印:题目要求的二叉树的从上至下打印(即按层打印),又称为二叉树广度优先搜索(BFS)。B

weixin_39739042的博客 325

leetcode-剑指 Offer 32 - II. 从上到下打印二叉树 II

leetcode-剑指 Offer 32 - II. 从上到下打印二叉树 II 从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。 例如: 给定二叉树: [3,9,20,null,null,15,7], 返回其层次遍历结果: [ [3], [9,20], [15,7] ] 提示: 节点总数 <= 1000 解题思路: 本题和leetcode-剑指 Offer 32 - I. 从上到下打印二叉树 题型是一样的,都是用队列处理层次遍历。只不过在I的基础上需要将每一层的所有节点放

ITAK_fans的博客 391

【C/C++】算法笔记

由于ANSI C只规定函数fflush( )处理输出数据流、确保输出缓冲区中的内容写入文件,并未对清理输入缓冲区作出任何规定,只是部分编译器(如Visual C++和Turbo C等)增加了此项功能,因此使用函数fflush( )来清除输入缓冲区中的内容,可能会带来移植问题。(1)若for循环条件语句用到qure.size(),且for循环内部代码有qure.pop()操作时,要把qure.size()单独拿出来赋给变量,将for循环执行之前的值存储下来,再将这一值运用到for循环的条件语句中。

weixin_52553215的博客 558

leetcode笔记总结——(6)通过四道题,来掌握二叉树的层序遍历。(python3和C++实现)

目录1、第一题:1.1 题目描述:1.2 思路:1.3 代码:(1)python代码:(2)C++代码:第二题:2.1 题目描述:2.2 思路:2.3 代码:(1)python代码:(2)C++代码:第三题:3.1 题目描述:3.2 思路:3.3 代码:(1)python代码:(2)C++代码: 通过三道题,来掌握二叉树的层序遍历。说明一下,要对节点类和树类熟悉,这里有一个教程:https://blog.csdn.net/weixin_45901519/article/details/11522479.

Ma Sizhou 960

二叉树的基本操作 |中根遍历|迭代|已知先序序列和中序序列重建二叉树|混合栈洗数|

二叉树:是一种有层次的存储数据的结构;可以把查找的复杂度降低到logn;区别root=NULL:指针是不是空*root=NULL:指针指向的位置是不是空。

m0_63471305的博客 797

Leetcode: 102. 二叉树的层序遍历

描述 给你一个二叉树,请你返回其按层序遍历得到的节点值。 (即逐层地,从左到右访问所有节点)。 示例 二叉树:[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 ..

yz_yz1234的博客 335

C++,vector 添加二维数组元素的两个方法,以及相应代码

// leetcode 118 // // //方法1,定义二位列表,初始值都是1,每个位置按照索引,修改值 // class Solution { // public: // vector<vector<int>> generate(int numRows) { // // vector<vector<int>> out; ...

m0_37192554的博客 1万+

redsn0w_win_0.9.6rc8.rar

用于IPHONE3GS解锁的越狱工具,红雪越狱

RevMan_5_4_windows-x64.exe

RevMan_5_4_windows-x64.exe

上一篇: 剑指 Offer 65. 不用‘+’、‘ - ’、‘ * ’、‘ / ’ 运算符号做完成加法
CH_Victor
博客等级 码龄5年 2粉丝 · 11原创
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值