3.10 分层遍历二叉树

四足机器人跨楼层轨迹规划:SCAN-Planner-Pure-ROS2开源项目实践指南 在机器人导航领域,路径规划是让机器人从起点安全、高效移动到目标点的核心技术。其原理通常基于环境地图(如占据栅格地图或八叉树地图),通过搜索算法(如A*、RRT*)在配置空间中找到一条无碰撞的可行路径。这项技术的价值在于赋予机器人在复杂、非结构化环境中的自主移动能力,是巡检、救援、物流等应用场景的基石。对于四足机器人而言,其运动能力超越了轮式平台,能在楼梯、斜坡等三维地形中移动,这使得传统的二维规划不再适用,需要专门的三维轨迹规划算法。SCAN-Planner-Pure-ROS2正是这样一个专注于解决四足机器 阅读详情

题目:

给定一棵二叉树,要求按分层遍历该二叉树,即从上到下按层次访问该二叉树(每一层将单独输出一行),每一层要求访问的顺序为从左到右,并将节点依次编号。下面是一个例子:

这里写图片描述

输出:

1
2 3
4 5 6
7 8

代码:

结构体的定义:

struct TreeNode{
    int val;
    TreeNode* left;
    TreeNode* right;
    TreeNode(int x) :val(x), left(NULL), right(NULL){

    }
};

解法一:
先是我自己第一次做的,我是利用先序遍历的递归算法,再加一个二维数组存储结果实现的。

void levelOrder(TreeNode* root, int lev,vector<vector<int>>& vec){
    if (root != NULL){
        if (vec.size() == lev){
            vector<int> v;
            vec.push_back(v);
        }
        vec[lev].push_back(root->val);
        levelOrder(root->left,lev+1,vec);
        levelOrder(root->right,lev+1,vec);
    }

}
void printNodeByLevelOrder(TreeNode* root){
    if (root == NULL){
        return;
    }
    vector<vector<int>> vec; 
    levelOrder(root, 0, vec);
    int lev = vec.size();
    for (int i = 0; i < lev; i++){
        for (int j = 0; j < vec[i].size(); j++){
            cout << vec[i][j] << " ";
        }
        cout << endl;
    }
}

解法二:
书上的数组非递归解法:
从根节点出发,依次将每层的节点从左到右压入一个数组,并用一个游标cur记录当前访问的节点,另一个游标last指示当前层次的最后一个节点的下一个位置。当cur==last,当前层次访问结束。

oid printNodeByLevelOrder_Nonrecursive(TreeNode* root){
    if (root == NULL){
        return;
    }
    vector<TreeNode*> vec;
    vec.push_back(root);
    int cur = 0;
    int last;
    while (cur < vec.size()){
        last = vec.size();
        while (cur < last){
            cout << vec[cur]->val << " ";
            if (vec[cur]->left != NULL){
                vec.push_back(vec[cur]->left);
            }
            if (vec[cur]->right != NULL){
                vec.push_back(vec[cur]->right);
            }
            cur++;
        }
        cout << endl;
    }
}

解法三:
还有种利用queue来做的。相当于BFS的一种变形,不过如果直接用队列BFS来做的话,不能分层。所以要加入一个结束信号,代表这一层的访问结束,即可作为是这一层的最后一个节点。

void printNodeByLevelOrder_BFS(TreeNode* root){
    queue<TreeNode*> q;
    q.push(root);
    q.push(NULL);
    while (!q.empty()){
        TreeNode* tmp = q.front();
        q.pop();
        if (tmp == NULL){
            cout << endl;
            continue;
        }
        cout << tmp->val << " ";
        if (tmp->left != NULL){
            q.push(tmp->left);
        }
        if (tmp->right != NULL){
            q.push(tmp->right);
        }
        //对于每一层的最后一个节点,它的子节点也是下一层的最后一个节点
        if (q.front() == NULL){
            q.push(NULL);
        }
    }
}

扩展问题:

如果要求按深度从下到上访问图中的二叉树,每层的访问顺序仍然是从左到右,即访问顺序变为:
78
456
23
1

代码:

void printNodeByLevelOrderBottom_Nonrecursive(TreeNode* root){
    vector<TreeNode*> vec;
    int cur = 0;
    int last;
    vec.push_back(root);
    while (cur < vec.size()){
        vec.push_back(NULL);
        last = vec.size();
        while (cur < last){
            if (vec[cur] && vec[cur]->left != NULL){
                vec.push_back(vec[cur]->left);
            }
            if (vec[cur] && vec[cur]->right != NULL){
                vec.push_back(vec[cur]->right);
            }
            cur++;
        }
    }
    for (int i = vec.size() - 1; i >= 0; i--){
        if (vec[i] == NULL){
            cout << endl;
        }
        else{
            cout << vec[i]->val << " ";
        }
    }
}
STM32鱼塘水质监测系统设计与实现 物联网技术在农业领域的应用正逐步深入,其中传感器网络作为关键基础设施,通过实时数据采集与传输实现环境监测。基于STM32微控制器的嵌入式系统因其高性能和低功耗特性,成为物联网终端设备的理想选择。该系统通过DS18B20水温传感器、PH传感器和浊度传感器组成的多参数检测网络,配合4G通信模块实现水质数据的远程监控。在农业物联网场景中,这种解决方案不仅大幅降低了传统人工检测的成本,更能通过实时预警有效预防养殖损失。本文介绍的鱼塘水质监测系统正是这一技术的典型应用,展示了如何通过STM32和常见传感器构建高性价比 阅读详情

相关推荐

Android HCE模拟NFC标签:实现跨设备NDEF数据共享

本文详细介绍了Android HCE技术如何模拟NFC标签实现跨设备NDEF数据共享。通过核心代码实现和标准AID配置,使手机能够被第三方NFC应用直接读取,支持文本、网址、Wi-Fi配置等多种数据类型,大幅提升设备间数据交换的便捷性和兼容性。

pytorch8learner的博客 248

分层遍历二叉树

1,问题:给定一棵二叉树,要求按分层遍历该二叉树,即从上到下按层次访问该二叉树(每一次将单独输出一行),每一层要求访问的顺序为从左到右,并将结点依次编号。      解法一:基本思想:用层序遍历的方法,初始化一个队列,当每一层结点进队时,统计当前层的下一层结点数目,当结点出队时,统计出队次数是不是和上一层结点数目相等,若相等,则表明上一层的结点输出完毕,换行;否则不换行打印,继续统计当前层的下一

yychenxie21的专栏 917

ABAQUS中CDP模型在钢筋混凝土节点低周反复荷载模拟的关键技术解析

本文深入解析了ABAQUS中CDP模型在钢筋混凝土节点低周反复荷载模拟中的关键技术。通过详细介绍CDP模型的核心价值、建模关键技术、滞回曲线优化方法及典型问题排查指南,帮助工程师精准模拟混凝土的拉伸开裂和压缩压碎行为,提升抗震分析效率。文章还提供了实用的工程应用技巧,如快速建模模板和后处理自动化脚本。

weixin_30555125的博客 525

二叉树的分层遍历

二叉树的分层遍历 二叉树的分层遍历, 换行打印。 下面的代码将解释如何实现换行打印。 分层遍历使用队列queue,按层次将节点推入队列,并在弹出时将节点的左右节点推入队列。 换行打印使用for循环,定义n=队列长度,遍历该行的所有节点后,跳出for循环,打印换行,再重新赋值队列长度n,重新进入下一行的for循环。 //定义Treenode class Treenode{ int val;...

无他 1913

【硬核指南/MI50 32G/Ubuntu】从零部署大模型:MI50显卡Ubuntu系统驱动安装与避坑全记录

本文详细记录了在Ubuntu系统上为AMD MI50显卡安装驱动并部署大模型的完整流程,包括硬件兼容性检查、BIOS关键设置、系统安装优化、ROCm驱动安装及常见问题解决方案。特别针对MI50显卡在X99平台上的特殊配置需求提供了实用技巧,帮助用户避免常见陷阱,提升大模型训练效率。

weixin_42520909的博客 805

基于微信小程序的扫码签到系统源码

大等于jdk1.8,大于mysql5.5,idea(eclipse),微信开发者工具。代码注释齐全,没有多余代码,适合学习(毕设),二次开发,包含论文技术相关文档。签到管理:新增签到,点击查看码展示二维码(有时效性)springboot mybatis 小程序。签到管理:查看用户创建的签到,可删除。用户管理:查看注册用户信息,及删除。签到记录:查看用户签到记录:可删除。个人信息:展示个人信息,可修改。统计分析:查看用户,签到数量。签到记录:查看用户签到记录。登录注册(含授权登录)我的签到:查看签到记录。

wfuhui的博客 5224

二叉树的路径与分层遍历

查找二叉树从根到x的最长路径;查找每层结点;查找两个结点之间的路径;

m0_63471305的博客 701

Claude Code 接入 DeepSeek-V4 教程

本文介绍Claude Code的安装配置流程:1) 安装Node.js 18+和Git(Windows);2) 通过npm全局安装@anthropic-ai/claude-code;3) 配置DeepSeek API环境变量(需替换API Key);4) 启动Claude Code或配置VSCode插件。重点包括Linux/macOS和Windows的环境变量设置方法,以及VSCode插件的settings.json配置项。完成配置后即可在终端或VSCode中使用Claude Code功能。

培根芝士的专栏 2003

3.10分层遍历二叉树-扩展问题

1.问题定义 给定一棵二叉树,要求按分层遍历该二叉树,即从上到下按层次访问该二叉树(每一层将单独输出一行),每一层要求访问的顺序为从左到右,并将节点依次编号。 要求遍历输出的结果分别为图2,图3和图4,其中图3和图4是扩展问题。                                           图1

chhuach2005的专栏 1081

永磁同步电机解耦控制实战:从电流反馈到内模解耦的算法演进与选型指南

本文深入探讨了永磁同步电机高性能驱动中的核心挑战——交叉耦合问题,并对比分析了电流反馈解耦和内模解耦两大主流算法的原理、性能与适用场景。文章指出,电流反馈解耦动态响应快但对参数敏感,内模解耦鲁棒性更强但略有滞后,为工程师在不同应用需求下的算法选型提供了清晰的实战指南。

weixin_29039773的博客 263

基于 YOLOv26 的金属表面缺陷检测系统:智能视觉质检方案

摘要: 基于YOLOv26的金属表面缺陷检测系统采用深度学习技术,实现对划痕、裂纹、腐蚀等8类常见缺陷的自动化检测。系统通过数据增强预处理和YOLOv26模型的高精度识别能力,具备多类别分类、实时推理和强鲁棒性特点,适用于不同金属材质与光照条件。架构包含数据采集、预处理、YOLOv26检测和后处理模块,代码实现采用PyTorch框架,支持训练数据增强与标准化处理,为工业质检提供高效智能解决方案。

一键难忘的博客 588

[编程之美] PSet3.10 分层遍历二叉树

问题描述:         给定         1.

飞扬的青春的专栏 1794

SAP 系统里生成 PDF 的几条主干路径:从 Spool 转换到 Adobe 原生渲染,再到 BTP 云服务

本文系统梳理了SAP生态中PDF生成的多种技术方案,包括Spool转换、OTF转换、Smart Forms/Adobe Forms原生生成以及云端服务等不同路径。文章通过实际案例和代码示例,详细分析了各方案的适用场景、技术要点和工程实践建议,特别强调了多语言支持、字体处理、性能优化等关键因素。针对不同业务需求,提供了从简单导出到复杂交互式PDF的完整解决方案框架,为SAP环境下的PDF处理提供了实用指南。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 285

[编程之美3.10]分层遍历二叉树

题目1描述:给定一棵二叉树,要求分层遍历该二叉树,即从上到下按层次访问该二叉树(每层将单独输出一行),每层要求访问的顺序从左到右,并将节点依次编号。正确输出为: ————————————————————————————————————————————————————————————————————————————— 1 2 3 4 5 6 7 8 —————————————————

qingmarch 558

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

《编程之美》读书笔记16: 3.10 分层遍历二叉树

《编程之美》读书笔记16: 3.10 分层遍历二叉树 看到Milo写的这篇文章,又翻了下书,发现书的代码(P253)有个瑕疵,每个节点值后面都会显示一个空格,如果将间隔字符改为“-”,输出的每行最后都有一个“-”,不能达到要求。不过,只要将 cout << vec[cur] -> data << " "; 这行改为: if (cur==last-1) co...

weixin_33894992的博客 431

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

编程之美3.10 分层遍历二叉树

推荐http://blog.csdn.net/ididcan/article/details/7985741 两个问题 1、分层遍历二叉树 2、打印某个层次中的节点(其中根节点是0层) #include #include using namespace std; struct Node{ int data; Node* left; Node* right; }; //max{d(u

hwltony的专栏 597

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

《编程之美》 3.10 分层遍历二叉树

给定一颗二叉树,要求按分层遍历该二叉树,即从上到下按层次访问该二叉树(每一层将单独输出一行),每一行要求访问的顺序是从左到右。 《编程之美》中有递归和非递归的解法。 递归解法的思路是,假设要求访问二叉树中第K层的节点,那么可以把它转换成访问以该二叉树根节点的左右节点为根的两颗左右子树的第K-1层的节点。依次递归 下面程序是输出第K层的节点 int PrintNodeAtLe

Will Mu 的专栏 811

编程之美 3.10 分层遍历二叉树 扩展问题

扩展问题 如果要求按深度从下到上访问图3-23中的二叉树,每层的访问顺序仍然是从左到右: 比较容易想到的方法是先按照层序弄好一个待遍历数组,层与层之间考虑用一个标识NULL作为分割,这样只需要反向遍历这个数组就行了,不过要注意的是弄这个遍历数组一定要先压入右节点,再压入左节点。 代码 void printNodeByLevel(Node *root) { vector<Node*> vec; int cur , last;//设定该层的起始点和结束点 vec.push_back(root)

Cainell的博客 237

编程之美——3.9重建二叉树和3.10分层遍历二叉树(Java and C++)

给定一个前序和中序变量的结果,写一个算法重建这棵树:如: 1、更具前序 前序: a b d c e f 中序:  d b a e c f 前序遍历的每一个节点,都是当前子树的根节点,同时,以对应的节点 为边界,就会把前序遍历的结果分为左子树和右子树。 a是前序中第一个节点,以a为中界,把中序的结果分成: 左:db 右:ecf 对于db,由于在前序中b在d前

睡得香吃得好胆子大的专栏 925

编程之美 3.10: 分层遍历二叉树

缘由 看到这本书就有一直哦 题干 我的思路 使用循环队列 首先,看到问题1我首先想到了图的广度优先搜索遍历算法,后来一查书(数据结构高分笔记),才想起来树本来就有一种遍历方式叫“层次遍历(P110)"。也就问题1中想要打印树的方式。利用了数据结构“循环队列”作为辅助的工具。 其实自己想的时候也想到了用队列的这个办法。不过想来这本数据结构之高分笔记是我很久之前看过的书

zy825316的专栏 896

【编程之美】3.10分层遍历二叉树

主要难度在于何时插入换行 学习到的:①vector 可以像数组一样用 不一定要用迭代器   代码及注释如下: #include&lt;iostream&gt; #include&lt;queue&gt; using namespace std; typedef struct BiTree { BiTree * pLeft, * pRight; int d...

weixin_33674437的博客 127
上一篇: 3.8求二叉树中节点的最大距离
下一篇: 3.11 程序改错(二分查找)
_IanXiao
博客等级 码龄12年 84粉丝 241原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值