给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。
叶子节点 是指没有子节点的节点。
示例 1:
输入:root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22
输出:[[5,4,11,2],[5,8,4,5]]
示例2:
输入:root = [1,2,3], targetSum = 5
输出:[]
示例3:
输入:root = [1,2], targetSum = 0
输出:[]
提示:
树中节点总数在范围 [0, 5000] 内
-1000 <= Node.val <= 1000
-1000 <= targetSum <= 1000
思路:
先序遍历,遍历数的所有节点,先序遍历中,记录从根节点到当前节点的所有路径,当遍历叶子节点且当前路径上所有节点之和等于target,将该路径加入结果集。
向上回溯时需要将之前加入的节点弹出。
AC代码:(C++)
class Solution {
public:
vector<vector<int>> res;
vector<int> path;
vector<vector<int>> pathSum(TreeNode *root, int target) {
recur(root, target);
return res;
}
void recur(TreeNode *root, int target) {
if (root == nullptr) return;
path.push_back(root->val);
target -= root->val;
if (target == 0 && root->left == nullptr && root->right == nullptr) res.push_back(path);
recur(root->left, target);
recur(root->right, target);
path.pop_back();
}
};