【无标题】1302 层数最深叶子节点的和

今天还挺难过,学了这么久的树,递归的题还是有问题,我什么时候才能明白呀,有时候感觉自己不适合学习,不适合学计算机。

复制代码
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
  //先定义最大深度
  int max1;
  void depthmax(TreeNode* root,int dep){
    if(root==NULL){
        return ;
    }
    if(dep>max1){
        max1=dep;
    }
    if(root->left!=NULL){
    depthmax(root->left,dep+1);
    }
    if(root->right!=NULL){
    depthmax(root->right,dep+1);
    }
  }

  int sumdepthmax(TreeNode *root,int dep){
    if(root==NULL){
        return 0;
    }
    if(dep==max1){
    return root->val;
    }
    int suml=sumdepthmax(root->left,dep+1);
    int sumr=sumdepthmax(root->right,dep+1);
    return suml+sumr;
  }
public:
    int deepestLeavesSum(TreeNode* root) {
    max1=0;
    depthmax(root,0);
    return sumdepthmax(root,0);
    }
};

这个题首先要两个函数,一个函数来求最大深度,我做第二遍的时候感觉思路很模糊,就是因为我没有想到先定义一个最大深度,然后再不断更新最大深度的值,如果左子树的深度大于最大深度,我们就将最大深度的值替换,右子树也一样。

第二个函数是求和函数,首先我的递归出口的条件错了,我的判断是假如左子树和右子树均为空的时候,这样反而会漏了最大深度,因为这样做相当于只要是没有孩子节点,就返回0,而我们要的是最大深度的节点,正确的应该是当此节点为空的时候,我们返回0,

相关推荐
oier_Asad.Chen15 小时前
【洛谷题解/AcWing题解/OI学习笔记】洛谷P2868【USACO07DEC】Sightseeing Cows G(01分数规划求最大比率)
算法·图论·spfa·二分·负环
cfm_291415 小时前
SpringAI + Ollama 本地大模型
java·开发语言·人工智能·语言模型
鲸采云SRM采购管理系统16 小时前
采购管理系统哪家好?2026最新测评对比
java·服务器·数据库
leisoo809717 小时前
财报数据怎么排雷本地化Python构建财务异常预警系统
人工智能·python·算法
0x5317 小时前
Java网络编程(二)
java·服务器·网络
Flittly17 小时前
【雕虫大技】Agent 动态 Skill 供应链安全加固(三):输出校验与治理闭环实战
java·spring boot·spring
Poo_Chai17 小时前
QT emit信号后完整处理流程,包括槽函数响应流程
java·开发语言·数据库
瑞码空间17 小时前
Java 图形界面(GUI)完整知识点手册
java·开发语言·图形界面·swing
树码小子17 小时前
开启 IDEA 中的断言功能
android·java·intellij-idea
茶本无香18 小时前
Java调用Shell脚本执行SQL数据库操作:从入门到实战
java·sql·shell