437.路径总和 III

本文探讨了在二叉树中寻找路径和等于特定数值的所有路径数量的算法。通过使用双递归方法,即pathSum函数和path函数,有效地解决了问题。文章详细解释了算法的实现过程,并提供了具体的代码示例。

给定一个二叉树,它的每个结点都存放着一个整数值。

找出路径和等于给定数值的路径总数。

路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。

二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数。

示例:

root = [10,5,-3,3,2,null,11,3,-2,null,1], sum = 8

在这里插入图片描述

返回 3。和等于 8 的路径有:

  1. 5 -> 3
  2. 5 -> 2 -> 1
  3. -3 -> 11

不需要求实际的路径,只需要求路径数量
用双递归解决,双递归是哪个双呢,首先有pathSum函数和path函数
pathSum函数用于由某个根为开头计算路径,递归计算每个节点
path函数则是确定某个根,对其进行递归,找出累加路径值等于sum,若当前根等于sum值则加1然后继续递归,(进行下次递归时减去当前节点的值sum-=root->val),否则直接递归

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */

int path(struct TreeNode* root , int sum){
    if(!root) return 0;
    int cnt=0 ;
    
    if(root->val  == sum){
        cnt+=1;
    }
    cnt+=path(root->left,sum-root->val)+path(root->right,sum-root->val);
    
    return cnt;    
}

int pathSum(struct TreeNode* root, int sum){
    //只要求路径的数量,路径由上到下,满足sum即可  递归?
    if(!root) return 0;
    //pathSum 函数计数从0开始
    //path 函数计数层层向下   sum-=root->val

    return path(root,sum)+pathSum(root->left,sum)+pathSum(root->right,sum);

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值