Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given sum.
For example:Given the below binary tree and
sum = 22
,
5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1
return
[ [5,4,11,2], [5,8,4,5] ]
====================================================================================
题目链接:https://leetcode.com/problems/path-sum-ii/
题目大意:给定一个二叉树和一个sum,求二叉树中从根到叶子的路径和等于sum的所有路径。
思路:使用递归计算方法,如上例:
1、头结点5对应的节点的sum值为22,则它的子节点4和8对应的sum值为22-5=17。
2、当找到当前节点为叶子并且该节点的数值跟其对应的sum相等的时候说明找到了,否则找不到。
附上代码:
/**
* 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:
vector<vector<int>> pathSum(TreeNode* root, int sum) {
vector < vector <int> > ans ;
if ( root == NULL )
return ans ;
TreeNode* l = root -> left ;
TreeNode* r = root -> right ;
vector <int> temp ( 1 , root -> val ) ;
if ( l == NULL && r == NULL )
{
if ( sum == root -> val )
ans.push_back ( temp ) ;
return ans ;
}
if ( root -> left )
hasPathSum ( root -> left , sum - root -> val , temp , ans ) ;
if ( root -> right )
hasPathSum ( root -> right , sum - root -> val , temp , ans ) ;
return ans ;
}
private :
void hasPathSum(TreeNode* root, int sum, vector <int> temp , vector < vector <int> >& ans )
{
if ( root == NULL )
return ;
TreeNode* l = root -> left ;
TreeNode* r = root -> right ;
if ( l == NULL && r == NULL )
{
if ( sum == root -> val )
{
temp.push_back ( root -> val ) ;
ans.push_back ( temp ) ;
}
return ;
}
temp.push_back ( root -> val ) ;
hasPathSum ( l , sum - root -> val , temp , ans ) ;
hasPathSum ( r , sum - root -> val , temp , ans ) ;
}
};