LeetCode写题历程——437. 路径总和 III

1.题目描述
给定一个二叉树,它的每个结点都存放着一个整数值。
找出路径和等于给定数值的路径总数。
路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。
二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数。
在这里插入图片描述
2.解题思路
(1)设以根节点为起点。因为路径方向是向下,所以采取前序遍历的方法遍历节点,遍历节点的过程中对当前节点值用变量temp进行累加。当变量temp==给定数值时,路径数+1。若一直遍历到叶子节点,并且temp!=给定数值,需要将temp-当前叶子节点值。(为了让temp与当前叶子节点的兄弟节点继续累加)。
(2)用前序遍历的方式,以二叉树的每一个节点为起点,使用(1)的算法。

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    int CarryOut(TreeNode* root, int sum, int temp, int array)
    {
        if(root==NULL)
            return array;
        temp+=root->val;
        if(temp==sum)
        {
            array++;
        }   
        if(root->left==NULL&&root->right==NULL&&temp!=sum)
        {
            temp=temp-root->val;
            return array;
        }
        array=CarryOut(root->left, sum, temp, array);
        array=CarryOut(root->right, sum, temp, array);        
        return array;
    }
    int Do(TreeNode* root, int sum, int result)
    {
        result+=CarryOut(root, sum, 0, 0);
        if(root->left!=NULL)
            result=Do(root->left, sum, result);
        if(root->right!=NULL)
            result=Do(root->right, sum, result);
        return result;
    }
    int pathSum(TreeNode* root, int sum) {
        if(root==NULL)
            return NULL;
        return Do(root, sum, 0);
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值