void pathSumRec(vector<vector<int> > &grid, int &kM, int &kN, int &sum, int &min_sum, int &m, int &n) {
     if (m==kM && n==kN) {
         if (min_sum == 0) {
             min_sum = sum;
         }
         if (min_sum > sum) {
             min_sum = sum;
         }
         return;
     }
     if (m<kM) {
         m++;
         sum = sum + grid[m][n];
         pathSumRec(grid, kM, kN, sum, min_sum, m, n);
         sum = sum - grid[m][n];
         m--;
     }
     if (n<kN) {
         n++;
         sum = sum + grid[m][n];
         pathSumRec(grid, kM, kN, sum, min_sum, m, n);
         sum = sum - grid[m][n];
         n--;
     }
 }
Example #2
0
int pathSumRec(TreeNode* root, int sum) //以root为起点,找到和为sum的路径个数
{
	if (root == nullptr)
		return 0;

	int rootmatch = (root->val == sum);
	int left = pathSumRec(root->left, sum - root->val);
	int right = pathSumRec(root->right, sum - root->val);

	return rootmatch + left + right;
}
Example #3
0
 void pathSumRec(TreeNode *root, int sum, vector<vector<int>>& res, vector<int>& path) {
     if (!root) return;
     if (!root->left && !root->right) {
         if (root->val == sum) {
             path.push_back(root->val);
             res.push_back(path);
             path.pop_back();
         }
         return;
     }
     path.push_back(root->val);
     pathSumRec(root->left, sum - root->val, res, path);
     pathSumRec(root->right, sum - root->val, res, path);
     path.pop_back();
 }
 int minPathSum(vector<vector<int> > &grid) {
     int kM = grid.size()-1;
     int kN = grid[0].size()-1;
     int m = 0;
     int n = 0;
     int sum = grid[m][n];
     int min_sum = 0;
     pathSumRec(grid, kM, kN, sum, min_sum, m, n);
     return min_sum;
 }
Example #5
0
int pathSum(TreeNode* root, int sum) 
{
	if (root == nullptr)
		return 0;

	int rootval = pathSumRec(root, sum);
	int lefttree = pathSum(root->left, sum);
	int righttree = pathSum(root->right, sum);
	return (rootval + lefttree + righttree);
}
Example #6
0
 vector<vector<int> > pathSum(TreeNode *root, int sum) {
     vector<vector<int>> res;
     vector<int> path;
     pathSumRec(root, sum, res, path);
     return res;
 }