描述
给定一个二叉树和一个值 sum\ sum sum,请找出所有的根节点到叶子节点的节点值之和等于 sum\ sum sum 的路径,
例如:
给出如下的二叉树, sum=22\ sum=22 sum=22,
返回
[
[5,4,11,2],
[5,8,9]
]
示例1
输入:
{1,2},1
返回值:
[]
示例2
输入:
{1,2},3
返回值:
[[1,2]]
是我比较擅长的深搜题
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
class Solution {
public:
/**
*
* @param root TreeNode类
* @param sum int整型
* @return int整型vector<vector<>>
*/
vector<vector<int>> ans;
int i = 0;
void find(TreeNode* root, vector<int> nodes, int sum, int num) {
if (!root) return;
if (!root->left && !root->right){
if (num + root->val == sum) {
nodes.push_back(root->val);
ans.push_back(nodes);
} else {
return;
}
}
nodes.push_back(root->val);
num += root->val;
find(root->left, nodes, sum, num);
find(root->right, nodes, sum, num);
}
vector<vector<int> > pathSum(TreeNode* root, int sum) {
// write code here
vector<int> nodes;
find(root, nodes, sum, 0);
return ans;
}
};