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

leetcode102 二叉树的层次遍历 递归

(1) 找出重复的子问题。

层次遍历是每一层的节点从左到右的遍历,所以在遍历的时候我们可以先遍历左子树,再遍历右子树

需要注意的是,在遍历左子树或者右子树的时候,涉及到向上或者向下遍历,为了让递归的过程中的同一层的节点放在同一个列表中,在递归时要记录深度 depth

同时,每次遍历到一个新的 depth,结果数组中没有对应的 depth 的列表时,在结果数组中创建一个新的列表保存该 depth 的节点

(2) 确定终止条件。

对于二叉树的遍历来说,想终止,即没东西遍历了,没东西遍历自然就停下来了。

即最下面一层的左右节点都为空了。

class Solution {
public:
    vector<vector<int>> levelOrder(TreeNode* root) {
        vector<vector<int>> res;  // 存储最终结果
        level(root, 1, res);      // 从第1层开始递归
        return res;
    }
    
private:
    void level(TreeNode* root, int depth, vector<vector<int>>& res) {
        if (root == nullptr) {
            return;  // 递归终止条件:空节点直接返回
        }
        
        // 如果当前深度超过结果数组大小,说明需要添加新的一层
        if (res.size() < depth) {
            res.push_back(vector<int>());
        }
        
        // 将当前节点值加入对应层
        res[depth - 1].push_back(root->val);
        
        // 递归处理左右子树,深度+1
        if (root->left) {
            level(root->left, depth + 1, res);
        }
        if (root->right) {
            level(root->right, depth + 1, res);
        }
    }
};

相关文章:

  • Multi-Stage Progressive Image Restoration论文阅读
  • JavaScript网页设计高级案例:构建交互式图片画廊
  • Java 8-17核心特性全景解析之Java11
  • suse15 sp1使用华为云软件源yum源zypper源
  • 树形结构溯源dp
  • DeepSeek 本地化部署教程
  • Hyperliquid 遇袭「拔网线」、Polymarket 遭治理攻击「不作为」,从双平台危机看去中心化治理的进化阵痛
  • 方阵幂次(矩阵快速幂)
  • 计算机等级考试数据库三级(笔记3)
  • GPT4o漫画制作(小白教程)
  • MATLAB 控制系统设计与仿真 - 31
  • AUTOSAR Mcal SPI - 基于Ifx TC37x
  • 地下水砷超标处理技术解析
  • 邪性!Anaconda安装避坑细节Windows11
  • RPC 同步与异步之使用Spring WebFlux + WebClient或Netty + Reactor
  • ruoyi-vue部署 linux 系统项目安装部署 oa 项目部署 (合集)
  • 2025年湖南建筑安全员B证备考资料
  • 【AI论文】LEGO拼图:大型语言模型在多步骤空间推理方面的表现如何?
  • 【SPP】蓝牙串口协议(SPP)深度解析:从 RS232 仿真到设备互联的技术实现
  • 基于深度学习的图像超分辨率技术研究与实现
  • 手机版企业网站h5/株洲百度seo
  • 学校网站怎么做的好坏/seo和点击付费的区别
  • 用安卓手机做网站主机/怎么找关键词
  • 网站哪家做的比较好/免费职业技能培训网
  • 温州网站建设联系电话/百度pc网页版入口
  • 怎么让别人做网站/自己如何做网站