题目:
给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。
说明: 叶子节点是指没有子节点的节点。
解法
递归
递归回溯,记count值,当count==0时,则找到路径,push_back给res数组
定义额外的数组path记作路径,
代码
class Solution {
private:
vector<vector<int>> res;
vector<int> path;
void traversal(TreeNode* node, int count) {
if(node->left == NULL && node->right == NULL && count == 0) {
res.push_back(path);
return;
}
if(!node->left && !node->right) {
return;
}
if (node->left) {
path.push_back(node->left->val);
count -= node->left->val;
traversal(node->left, count);
path.pop_back();
count += node->left->val;
}
if (node->right) {
path.push_back(node->right->val);
count -= node->right->val;
traversal(node->right, count);
path.pop_back();
count += node->right->val;
}
return;
}
public:
vector<vector<int>> pathSum(TreeNode* root, int targetSum) {
res.clear();
path.clear();
if (!root) return res;
path.push_back(root->val);
traversal(root, targetSum - root->val);
return res;
}
};