当前位置:首页 > 力扣 > 力扣1302题:层数最深叶子节点的和 - 递归双遍历解法详解

力扣1302题:层数最深叶子节点的和 - 递归双遍历解法详解

2个月前 (06-13)

力扣1302题:层数最深叶子节点的和 - 递归双遍历解法详解  二叉树遍历 递归算法 C++树操作 数据结构实战 编程面试题解 第1张

内容简介

本文详细解析了力扣1302题"层数最深叶子节点的和"的递归双遍历解法。通过先计算的最大深度,再求该深度所有节点值的和,展示了如何高效解决这类树结构问题。文章包含完整注释代码、算法思路讲解和复杂度分析,帮助读者掌握树遍历的高级技巧。


算法思路

‌深度计算阶段‌:递归遍历树,记录最大深度

‌求和阶段‌:再次递归遍历,累加深度等于最大深度的节点值

‌双递归设计‌:先确定深度边界,再收集目标节点


代码实现(带详细注释)

class Solution {
public:
    int depth = 0; // 存储树的最大深度
    
    // 计算树的最大深度
    void maxdepth(TreeNode* root, int dep) {
        if (root) {
            // 更新最大深度
            if (dep > depth) 
                depth = dep;
            // 递归处理左右子树,深度+1
            maxdepth(root->left, dep + 1);
            maxdepth(root->right, dep + 1);
        }
    }
    
    // 求最深叶子节点的和
    int summaxdepth(TreeNode* root, int dep) {
        if (!root)
            return 0; // 空节点返回0
        if (dep == depth) 
            return root->val; // 找到最深叶子节点
        // 递归求左右子树的和
        return summaxdepth(root->left, dep + 1) + summaxdepth(root->right, dep + 1);
    }
    
    // 主函数
    int deepeSTLeavesSum(TreeNode* root) {
        maxdepth(root, 0); // 先计算最大深度
        return summaxdepth(root, 0); // 再求最深叶子节点的和
    }
};


复杂度分析

‌时间复杂度‌:O(n),两次遍历共访问每个节点两次

‌空间复杂度‌:O(h),递归空间取决于树的高度


优化方向

‌单次遍历解法‌:在遍历时同时记录当前深度和对应节点值的和

迭代实现‌:使用栈或队列替代递归

‌并行处理‌:对左右子树可考虑并行计算


总结

递归解法清晰地分离了深度计算和求和的逻辑,虽然时间复杂度略高但思路直观。理解这种解法有助于掌握树问题的分层处理技巧。


原创内容 转载请注明出处

分享给朋友:

相关文章

力扣2390题:移除字符串中的星号 - 栈模拟解法详解

力扣2390题:移除字符串中的星号 - 栈模拟解法详解

内容简介本文详细解析了力扣2390题"移除字符串中的星号"的高效解法。通过模拟栈操作处理字符串中的星号字符,实现了删除星号及其前一个字符的功能。文章包含完整注释代码、算法思路讲解和...

力扣701题:二叉搜索树插入操作 - 递归解法详解

力扣701题:二叉搜索树插入操作 - 递归解法详解

内容简介本文详细解析了力扣701题"二叉搜索树中的插入操作"的递归实现方法。通过遵循二叉搜索树的性质,展示了如何高效地在BST中插入新节点。文章包含完整注释代码、算法思路讲解和复杂...

手搓二叉树构建类代码详解:从入门到实践(适合新手小白)

一、简介和应用二叉树是数据结构中常见的一种树形结构,每个节点最多有两个子节点(左子节点和右子节点)。它广泛应用于算法设计、数据存储与搜索(如二叉搜索树)、表达式解析等领域。本文将通过手写的C++代码,...

洛谷P2789题解:递归算法与避免重复计算的技巧

洛谷P2789题解:递归算法与避免重复计算的技巧

一、题目解读洛谷P2789题要求计算n条直线在平面上两两相交产生的交点总数。题目强调交点不重复,需考虑平行线情况。关键点在于如何高效枚举所有可能的交点组合,并排除重复结果。二、解题思路采用递归算法,核...

牛客3747题解析:二叉树序列化与反序列化(C++实现)

牛客3747题解析:二叉树序列化与反序列化(C++实现)

一、题目解读牛客3747题要求实现二叉树的序列化与反序列化功能。序列化即将二叉树转化为字符串,反序列化则将字符串还原为二叉树结构。题目核心在于设计高效的遍历与节点表示方法,需考虑空节点的处理,确保序列...

【牛客233052题解析】二叉树最大路径和:动态规划与递归算法详解

【牛客233052题解析】二叉树最大路径和:动态规划与递归算法详解

一、题目解读牛客233052题要求构建一棵二叉树,并计算其中任意路径节点值之和的最大值。题目输入包含两个数组:values(节点值)和parents(父节点索引),需根据这些信息构建树结构,并求解最大...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。