给你二叉树的根节点
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 输出:[]解题思路:
本题是找出二叉树中和为某一值的路径,树的路径是指从树根到叶子结点的路径长度之和。我们可以遍历树,把树的每一分支的路径长度与目标长度进行比较,若相等用数组存起来,最后找到所有满足条件的路径,放在二维数组里。思路是深度遍历。
代码如下:
class Solution { public: vector<vector<int>>ret;//存满足条件的所有路径 vector<int>ans;//记录路径的一维数组 void dfs(TreeNode*root,int target)//深度遍历 { if (root==nullptr)//结点为空,退出 { return; } ans.push_back(root->val);//记录路径 target-=root->val;//目标长度-当前路径上的结点值 if(!root->left&&!root->right&&target==0)//如果当前结点是叶子结点且路径长度与目标长度相同 { ret.push_back(ans);//将当前路径存放在ret中 } dfs(root->left,target);//遍历左子树 dfs(root->right,target);//遍历右子树 target+=root->val;//target要加回被叶子结点减的值 ans.pop_back();//叶子节点,左右子树为空,返回,且路径长度与目标长度不相同,删掉该叶子结点,返回该叶子结点的根结点,target要加回被叶子结点减的值。 } vector<vector<int>> pathSum(TreeNode* root, int target) { dfs(root,target);//深度遍历 return ret;//返回满足条件的路径。 } };
剑指offer 二叉树中和为某一值的路径
最新推荐文章于 2024-06-21 17:14:10 发布