Path Sum II
路径和 二
描述:
给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。
说明: 叶子节点是指没有子节点的节点。
解答:
本题为上题的延伸,上一题只需找到一条满足条件的路径即可,本题需要找到所有满足条件的路径,并且还要将
路径上的节点保存下来,因此可以想到的算法为dfs,深度优先搜索根节点到每个叶节点的路径,判断路径上所有节点的
和是否满足条件。dfs算法的一般步骤如下:
int check(参数) { if(满足条件) return 1; return 0; } void dfs(int step) { 判断边界 { 相应操作 } 尝试每一种可能 { 满足check条件 标记 继续下一步dfs(step+1) 恢复初始状态(回溯的时候要用到) } }
因此可以给出本题的代码如下:
class Solution { public: vector<vector<int>> pathSum(TreeNode* root, int sum) { vector<int> temp; vector<vector<int>> res; dfs(root,temp,res,sum); return res; } void dfs(TreeNode* root,vector<int>& temp,vector<vector<int>>&res,int sum) { if(!root) return ;//判断边界条件 temp.push_back(root->val); if(!root->left&&!root->right&&root->val==sum) res.push_back(temp);//是否满足条件 dfs(root->left,temp,res,sum-root->val);//继续尝试其它的可能情况 dfs(root->right,temp,res,sum-root->val); temp.pop_back(); } };

浙公网安备 33010602011771号