路径总和 III
题目描述:
给定一个二叉树,它的每个结点都存放着一个整数值。
找出路径和等于给定数值的路径总数。
路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。
二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数。
示例:
题解:
先使用一个全局变量pathsum来表示路径数,然后从一个给定的节点p,找出这个节点所有的路径和为sum的个数,然后再根节点开始先序遍历,把p遍历到二叉树的每一个节点。然后返回pathsum即可。
从一个给定的节点p,找出这个节点所有的路径和为sum的个数也可以使用先序遍历,遍历到每一个节点,就sum-=p->val,当sum=0时,就说明有一条为sum的路径,只需pathsum++即可。
代码如下:
/** * 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 pathsum=0;
* void path(TreeNode* root,int sum)
* {
* if(root==NULL)
* {
* return ;
* }
* sum-=root->val;
* if(sum==0)
* {
* pathsum++;
* }
* path(root->left,sum);
* path(root->right,sum);
* }
* int pathSum(TreeNode* root, int sum)
* {
* if(root==NULL)
* {
* return 0;
* }
* path(root,sum);
* pathSum(root->left,sum);
* pathSum(root->right,sum);
* return pathsum;
* }
* };
执行用时 :40 ms, 在所有 cpp 提交中击败了62.02% 的用户
内存消耗 :14.5 MB, 在所有 cpp 提交中击败了94.31%的用户