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记录栈顶位置

总结:

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

相关推荐
Wadli3 分钟前
26.单调栈
算法
xian_wwq4 分钟前
【学习笔记】网络与数据安全领域强制性标准
笔记·学习
晨曦夜月5 分钟前
进程的五大状态及特殊进程解析
linux·服务器·算法
24白菜头9 分钟前
【无标题】
c++·笔记·学习·harmonyos
吟安安安安9 分钟前
适合短期冲刺的学习工作流(针对算法)
学习·算法
科研前沿14 分钟前
什么是时空融合技术?
大数据·人工智能·数码相机·算法·重构·空间计算
AI科技星19 分钟前
全域数学本源公理:0、1、∞ 三者核心关系 (典籍定稿版)
人工智能·算法·数学建模·数据挖掘·量子计算
suirosu22 分钟前
痛风高尿酸血症的治疗方法
笔记·其他·微信·新浪微博
AI科技星24 分钟前
全域数学·第卷:场计算机卷(场空间计算机)【乖乖数学】
java·开发语言·人工智能·算法·机器学习·数学建模·数据挖掘
Deepoch26 分钟前
数学模型驱动:Deepoc 低幻觉数学大模型助力发动机全周期智能优化
人工智能·算法·机器学习·deepoc·数学大模型·低幻觉