leetcode做题笔记113. 路径总和 II

给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。

叶子节点 是指没有子节点的节点。

思路一:递归

cpp 复制代码
void dfs(struct TreeNode* root, int targetSum, int* returnSize, int** returnColumnSizes,int **returnNums,int *stack,int top,int sum)
{
    if(root == NULL)
    {
        return;
    }

    sum += root->val;
    stack[top]  = root->val;
    if(root->left== NULL && root->right == NULL)
    {
        if(sum == targetSum)
        {
           returnNums[*returnSize] = (int *)malloc(sizeof(int) * (top + 1));
           memcpy(returnNums[*returnSize] , stack, sizeof(int) * (top + 1));
            (*returnColumnSizes)[*returnSize] = top + 1;
            *returnSize = *returnSize + 1;
        }
    }
    dfs(root->left,targetSum,returnSize,returnColumnSizes,returnNums,stack,top+1,sum);
    dfs(root->right,targetSum,returnSize,returnColumnSizes,returnNums,stack,top+1,sum);
}

int** pathSum(struct TreeNode* root, int targetSum, int* returnSize, int** returnColumnSizes)
{
    int **returnNums = (int **)malloc(sizeof(int *)*50000);
    *returnColumnSizes = (int *)malloc(sizeof(int )*50000);
    *returnSize = 0;
    int stack[5000] = {0};
    dfs(root,targetSum,returnSize,returnColumnSizes,returnNums,stack,0,0);
    return returnNums;
}

分析:

本题要求路径总和,可想到将每个数到叶子节点的路径总和,等到叶子节点时判断总和是否等于目标数,用数组记录,最后输出答案即可,注意递归时注意用top记录栈顶位置

总结:

本题考察递归的应用,将路径中所有符合节点记录再输出即可

相关推荐
野渡拾光1 小时前
【考研408数据结构-05】 串与KMP算法:模式匹配的艺术
数据结构·考研·算法
tainshuai3 小时前
用 KNN 算法解锁分类的奥秘:从电影类型到鸢尾花开
算法·分类·数据挖掘
饕餮争锋3 小时前
设计模式笔记_行为型_访问者模式
笔记·设计模式·访问者模式
不羁。。5 小时前
【撸靶笔记】第七关:GET - Dump into outfile - String
数据库·笔记·oracle
Coovally AI模型快速验证9 小时前
农田扫描提速37%!基于检测置信度的无人机“智能抽查”路径规划,Coovally一键加速模型落地
深度学习·算法·yolo·计算机视觉·transformer·无人机
pusue_the_sun9 小时前
数据结构:二叉树oj练习
c语言·数据结构·算法·二叉树
RaymondZhao349 小时前
【全面推导】策略梯度算法:公式、偏差方差与进化
人工智能·深度学习·算法·机器学习·chatgpt
好望角雾眠9 小时前
第一阶段C#基础-10:集合(Arraylist,list,Dictionary等)
笔记·学习·c#
zhangfeng113310 小时前
DBSCAN算法详解和参数优化,基于密度的空间聚类算法,特别擅长处理不规则形状的聚类和噪声数据
算法·机器学习·聚类
圣保罗的大教堂10 小时前
leetcode 2348. 全 0 子数组的数目 中等
leetcode