当前位置: 首页 > article >正文

【宽搜】4. leetcode 103 二叉树的锯齿形层序遍历

1 题目描述

题目链接:二叉树的锯齿形层序遍历
在这里插入图片描述

2 题目解析

根据题目描述,第一行是从左往右遍历,第二行是从右往左遍历。和层序遍历的区别就是:
在偶数行需要从右往左遍历。

因此,只需要在层序遍历的基础上增加一个变量判断层数,如果是奇数层就不需要改变vector,如果是偶数层就将该层的vector逆转一下。

我在这篇文章中讲解了宽度优先遍历的模板,如果没有看的同学可以先去看一下。

代码

class Solution {
public:
    vector<vector<int>> zigzagLevelOrder(TreeNode* root) {
        vector<vector<int>> res;
        queue<TreeNode*> q;

        if (root == nullptr)
            return res;
        
        q.push(root);
        //判断层数 --> n是递增的,所以在外面定义
        int n = 1;
        while(q.size())
        {
            vector<int> tmp;
            int sz = q.size();
           
            //对每一层进行操作   
            for (int i = 0; i < sz; ++ i)
            {
                TreeNode* t = q.front();
                q.pop();

                if (t->left)
                    q.push(t->left);
                if (t->right)
                    q.push(t->right);
                
                tmp.push_back(t->val);
            }

            //是偶数就要逆置一下
            if (n % 2 == 0)
                reverse(tmp.begin(), tmp.end());

            //注意顺序,需要先逆转再增加n的值,不然会出现完全相反的结果    
            ++ n;
            res.push_back(tmp);
        }

        return res;
    }
};

在这里插入图片描述


http://www.kler.cn/news/333210.html

相关文章:

  • Python环境安装教程
  • 景区+商业,如何实现1+1>2?
  • 【ShuQiHere】深入理解 LC-3 的堆栈与基于中断的 I/O 机制
  • C/C++:内存管理
  • 遥感影像-语义分割数据集:云及云阴影数据集详细介绍及训练样本处理流程
  • CSS计数器
  • Effective C++中文版学习记录(二)
  • 【无人机设计与技术】自抗扰控制(ADRC)的建模与仿真研究
  • MongoDB 索引
  • 世优科技出席36氪2024具身智能大会圆桌对话,入选创新应用案例
  • SOMEIP_ETS_166: SD_TestFieldUINT8
  • 【MySQL】数据库中的内置函数
  • 《程序猿之Redis缓存实战 · 有序集合类型》
  • XSLT 实例:掌握 XML 转换的艺术
  • 22.3 解读k8s服务发现源码
  • Vite+Vue3+SpringBoot项目如何打包部署
  • shadcn-vue 快速入门(2)
  • LLaMA 3 和 OpenAI有哪些相同点和不同点?
  • 昇思学习打卡营第32天|基于ResNet50的中药炮制饮片质量判断模型
  • Middleware---RocketMQ