购买网站建站,网站悬浮微信二维码,广州市安全教育平台app下载,wordpress连接数据库错误今日份题目#xff1a;
给你二叉树的根节点 root 和一个整数目标和 targetSum #xff0c;找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。
叶子节点 是指没有子节点的节点。
示例1 输入#xff1a;root [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSu…今日份题目
给你二叉树的根节点 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那么将该路径放入结果数组否则删除该路径。判断某一路径是否能得出target就是在路过每个节点时让当前target减去该节点的值直到0。
代码
/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution
{
public:vectorvectorint res;vectorint path;//记录路径void dfs(TreeNode* root, int target) {if(rootNULL) return;path.push_back(root-val);target-root-val;if(root-leftNULLroot-rightNULLtarget0) {//满足条件的路径放入结果数组中res.push_back(path);}//依次遍历左子树和右子树dfs(root-left,target);dfs(root-right,target);path.pop_back();//依次递归完如果没有压入结果数组就说明该路径不满足条件删除}vectorvectorint pathSum(TreeNode* root, int target) {dfs(root,target);return res;}
};提交结果 欢迎大家在评论区讨论如有不懂的代码部分欢迎在评论区留言