c++实现---之字形打印二叉树

控制台图形化打印二叉树(c/c++) 用c/c++实现的控制台图形化打印二叉树 阅读详情

题目:请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
与之前的打印二叉树都是特别像,因此是同样的思路解决,使用bfs借助队列很方便的可以解决。
首先回顾一下模板:
如果不需要确定当前遍历到了哪一层,模板如下:

void bfs() {
 vis[] = {0}; // or set
 queue<int> pq(start_val);

 while (!pq.empty()) {
     int cur = pq.front(); pq.pop();
     for (遍历cur所有的相邻节点nex) {
         if (nex节点有效 && vis[nex]==0){
             vis[nex] = 1;
             pq.push(nex)
         }
     } // end for
 } // end while
}

如果需要确定遍历到哪一层,模板如下:

void bfs() {
 int level = 0;
 vis[] = {0}; // or set
 queue<int> pq(original_val);
 while (!pq.empty()) {
     int sz = pq.size();

     while (sz--) {
             int cur = pq.front(); pq.pop();
         for (遍历cur所有的相邻节点nex) {
             if (nex节点有效 && vis[nex] == 0) {
                 vis[nex] = 1;
                 pq.push(nex)
             }
         } // end for
     } // end inner while
     level++;

 } // end outer while
}

这道题关键思路是奇数层从左往右,偶数层从右往左遍历;
代码如下:

class Solution {
public:
    vector<vector<int> > Print(TreeNode* pRoot) {
        vector<vector<int>> res;
        if(!pRoot){
            return res;
        }
        queue<TreeNode*> help;
        help.push(pRoot);
        int level=0;
        while(!help.empty()){
            int sz=help.size();
            vector<int> ans;
            while(sz--){
                 TreeNode *node=help.front();
                 help.pop();
                ans.push_back(node->val);
                if(node->left) help.push(node->left);
                if(node->right) help.push(node->right);
            }
            ++level;
            if(!(level&1)){//使用位运算快速判断一个数是偶数还是奇数
                reverse(ans.begin(), ans.end());//如果是偶数层则反转vector
            }
            res.push_back(ans);
        }
        return res;
    }
    
};
vscode中创建vue快捷键 1.安装Vetur插件(扩展里面直接搜) 2.vscode 界面里面左上角选则 文件=> 首选项=> 用户代码片段=>新建全局代码片段=>在输入框中新建名称为vue.json 3.删除里面的注释,当然你也可以留着,把下面的代码粘贴进去! { // Place your 全局 snippets here. Each snippet is defined under a snippet name and has a scope, prefix, body and // descri 阅读详情

相关推荐

保姆级教程:如何用Le2i Fall Detection Dataset训练你的跌倒检测模型(附数据集下载)

本文提供了一份详细的实战指南,教你如何使用Le2i Fall Detection Dataset训练跌倒检测模型。内容涵盖数据集的深度解析、预处理与工程化管道搭建、模型选择与训练策略,以及评估优化与部署考量,旨在帮助开发者从零构建高精度、可应用的跌倒检测系统。

assembly8low的博客 1288

构建一颗二叉树,并将其打印出来(c++实现)

求树的深度打印树感觉太繁琐了,直接拿去用就行,不需要知道细节。

qq_37795916的博客 2970

SAP 超详细解析信用控制

当然,集团内中国区、日本或欧洲区的公司使用了不同本位货币会计核算虽然分开,但对于客户的信用也可以统一管 理的,只要将这些不同本位币的公司代码纳入同一信用控制范围,信用控制范围货币可以考虑使用总部集团的货币,各公司代码的信用发生额自动根据系统设定汇率 转换为统一的信用控制范围货币。此步有一个“覆盖CC范 围”的选项,表示在过账时此步缺省的分配给公司代码的信用控制范围可以在其它信用控制范围使用,有时当一个公司代码的客户需要将信用数据过账到其它信用控 制区域,这个选择就非常有必要。

matinal 當冬夜漸暖 。公众号:matinal 1万+

C++打印完全二叉树

思路:完全二叉树可以采用数组顺序存储,而且除最后一层外其余各层都是满的。则可以采用逆序打印的方式,先确定最底层的节点位置及数目,进而确定其上各层的节点位置。 打印效果 代码实现 #include<iostream> #include<stdlib.h> #include<string> #include<vector> #include<cmath> #include<time.h> #include<exceptio

daimashiren的博客 1152

BetaFlight开源飞控源码分析

BetaFlight是穿越机领域比较成熟的开源飞控,本篇文章主要分析一下源代码以及如何使用这个开源代码

weixin_43811044的博客 1万+

UG\NX二次开发 获取三平面交点

//如果返回值不为0 则此三个面没交点 int three_faces_point(tag_t tagFace1, tag_t tagFace2, tag_t tagFace3, double *dou_x, double *dou_y, double *dou_z)

王牌飞行员_里海的博客 675

c++可视化 横向打印二叉树(连线、规整)

这次其实是之前一片博客的改进版。这次的二叉树我们使用了经典的 string + vector + shared_ptr 组合,从而使二叉树代码更直观,同时也把内存管理交由 STL 负责。同样地,本文也遵守 Google 风格,以供大家参考。

qq_57404161的博客 2242

64、5G 侧链通信技术详解

本文详细解析了5G侧链通信的关键技术,包括资源感知与选择、UE间协调、混合ARQ、功率控制、信道探测与CSI报告以及侧链同步。资源感知与选择通过周期性或随机方式实现资源分配,UE间协调通过主动或被动方式避免资源冲突。混合ARQ机制确保数据传输可靠性,功率控制和信道探测优化传输质量并减少干扰。侧链同步则通过多种方式确保设备间时间一致性。这些技术相互配合,构建了高效稳定的5G侧链通信体系,适用于智能交通、物联网、应急通信等多个领域,为未来无线通信发展提供强大支撑。

oil88的博客 102

剑指offer_二叉树的打印合集(C++_上下打印.换行打印.之字打印_bfs+栈与队列+用表格模拟栈队列操作)

原题链接 文章目录思路 思路

dodamce的博客 1972

OpenGL 进阶系列10 - 光线跟踪实现简介(Ray Tracing)

OpenGL 实现光线跟踪(Ray Tracing)是一个相对复杂但有趣的挑战,通常用于生成高度逼真的图像效果,如反射、折射、阴影等。OpenGL 本身并不是为光线跟踪设计的,但可以通过结合计算着色器和现代 OpenGL 功能实现光线跟踪。光线跟踪的基本思路是从相机(或视点)出发,发射光线并计算这些光线与场景中物体的交点。光线与场景中物体相交的计算。计算交点的光照(基于表面法线、光源位置、材质等)。反射和折射的处理(如果物体是透明或反射的)。

GPU全栈博主 1534

【DRAM存储器五十六】LPDDR5介绍--WCK2CK Leveling和Read gate training

简述LPDDR5 WCK2CK leveling和read gate traning基本原理与操作步骤

highman110的博客 8793

【剑指offer】之字形打印二叉树,C++实现

原创文章,转载请注明出处!本题牛客网地址博客文章索引地址博客文章中代码的github地址1.题目 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。例如:输入二叉树输出顺序13 24 5 6 715 14 13 12 12 10 9 82.思路 本题使用两个栈作为辅助容器。打印某一层节...

weixin_33697898的博客 153

【UNet 改进 | 注意机制篇】UNet引入CA注意力机制(2021 CVPR),二次创新

在医学图像分割任务中,病灶区域往往形态各异、边界模糊,且经常与周围组织的对比度较低,这要求模型具备极强的特征提取和细节辨别能力。传统的U-Net网络虽然通过跳跃连接融合了多尺度特征,但在处理复杂语义和精细边缘时仍有不足,尤其是在捕获特征时常常忽略位置信息。为了解决这些痛点,本文引入了在计算机视觉领域表现出色的 CA(Coordinate Attention,协调注意力)机制。CA 巧妙地将位置信息嵌入到了通道注意力中,通过水平和垂直两个方向的一维池化,同时捕获长距离依赖和精确的位置坐标。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 188

剑指offer-按之字形顺序打印二叉树C++实现

剑指offer-按之字形顺序打印二叉树C++实现 原题链接 ![/* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } }; */ class Solution { public: vector<vector<int&g

YANJINING 727

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

按之字形顺序打印二叉树 c++实现

题目描述请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。/*struct TreeNode {    int val;    struct TreeNode *left;    struct TreeNode *right;    TreeNode(int x) :            val(x),...

因每天学习而伟大 1173

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

剑指offer32(1,2,3)--从上往下打印二叉树,分行从上往下打印二叉树,按之字形顺序打印二叉树——java/C++实现

从上往下打印二叉树 题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印。 思路: 层序遍历,用到队列 /* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { ...

wake_alone 271

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

剑指Offer JZ59 按之字形顺序打印二叉树 C++实现

题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。 解题思路 方法一:层次遍历 1、思路:层次遍历二叉树,保存每一层的结点值,最后只需要反转偶数层的结点值就行了。 2、代码: /* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x)

weixin_41020287的博客 261

59.按之字形顺序打印二叉树

题目 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。 思路 之字形打印二叉树,其实就是按层访问二叉树的一个变种。 用双向链表来保存二叉树的结点。 第一层就是根节点,别根节点的左、右孩子尾插到队列中。 第二层从右向左打印,双向队列从尾部访问,打印各结点,同时各结点右、左孩子头插入双向队列。 第三层从左...

Dou 163

之字形打印二叉树

题目描述 请实现一个函数按照之字形顺序从上向下打印二叉树。 即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。 样例 Input: [8, 12, 2, null, null, 6, null, 4, null, null, null] Output:[[8], [2, 12], [6, 4]] 解题思路 描述 同样是树的层次遍历。...

YangLei253的博客 204

剑指offer(C++)——按之字形顺序打印二叉树

题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。 /* 思路:打印第一层结点的时候要把第二层结点保存到一个容器里,由于打印第二层结点的顺序是从右至左,容器为后进先出,故容器为栈 打印第一层时,依次把第一层的左子结点和右子结点保存到栈中;打印第二层结点时要把第三层结点保存

YF_Li123的博客 1585

面试题32:从上往下打印二叉树

面试题32(一):不分行 // 题目:从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印。 【代码】 #include<iostream> //#include<vector> #include<stack> #include<algorithm> //#include<stack> #include<queue> using namespace std; struct BinaryTreeNode { int va

weixin_42715287的博客 142

二叉树 层次交替遍历二叉树

请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印, 第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。 思路:层次遍历采用队列模拟 开始 根节点入队列 开始一个循环,每次出队列一个元素,访问该值 若该节点 左右子节点不为NULL 放入队列尾部 循环直到 队列为空 ——如何交替一行一行输出 一开始队列的长度为size表示上一层节点数目 每次控...

一只老风铃 863

【剑指offer】面试题32(3) 按之字形顺序打印二叉树

有关剑指offer题目的解析:剑指offer 题目整理 题目要求 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。 如: 1 / \ 2 3 / \ / \ 4 5 6 7 打印顺序: 1 3 2 4 5 6 7 解题分析 有了从上到下打印二叉树 ,把二叉树打印...

爱喝舒化奶的博客 382

剑指offer——之字形打印二叉树(c++)

题目描述 请实现一个函数按照之字形顺序从上向下打印二叉树。 即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。 样例 输入如下图所示二叉树[8, 12, 2, null, null, 6, 4, null, null, null, null] 8 / \ 12 2 / \ 6 4 输出:[[8],...

SCS199411的博客 563

刷题 - 按之字形打印二叉树

题目描述: 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。 解题思路: 从题目分析可知,题目的意思是:从上到下,单数行从左到右打印,双数行从右到左打印,这就需要我们在求解过程中要记住当前打印的是单数行还是奇数行。 考虑设置两个辅助栈空间,分别用于存放单数行的数据和双数行的数据,根据层序遍历的思想:遍历某一行时,可以直接将下一行的内容缓存,由此得到处理流程思路: ...

Double 197

剑指offer 按之字形顺序打印二叉树(C++)

题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。 解题思路 本题目就是二叉树层序遍历的变形,在程序主题中可以定义一个queue队列数据结构来方便二叉树的遍历。 本题目返回一个动态二维数组即vector<<vector>int >类型,思路可以是定义一个一维数组v...

bwqiang的博客 373
上一篇: c++实现---多行从上往下打印二叉树
下一篇: c++实现---二叉搜索树的后序遍历
codeFizz
博客等级 码龄9年 10粉丝 55原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值