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

总结:

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

相关推荐
2303_Alpha1 小时前
深度学习入门:深度学习(完结)
人工智能·笔记·python·深度学习·神经网络·机器学习
冲帕Chompa1 小时前
图论part10 bellman_ford算法
数据结构·算法·图论
緈福的街口1 小时前
【leetcode】144. 二叉树的前序遍历
算法·leetcode
GG不是gg1 小时前
排序算法之基础排序:冒泡,选择,插入排序详解
数据结构·算法·青少年编程·排序算法
姝孟2 小时前
学习笔记(C++篇)—— Day 6
笔记·学习
随意起个昵称2 小时前
【双指针】供暖器
算法
倒霉蛋小马2 小时前
最小二乘法拟合直线,用线性回归法、梯度下降法实现
算法·最小二乘法·直线
codists2 小时前
《算法导论(第4版)》阅读笔记:p82-p82
算法
埃菲尔铁塔_CV算法2 小时前
深度学习驱动下的目标检测技术:原理、算法与应用创新
深度学习·算法·目标检测
霸王蟹2 小时前
React Fiber 架构深度解析:时间切片与性能优化的核心引擎
前端·笔记·react.js·性能优化·架构·前端框架