其他分享
首页 > 其他分享> > 113. 路径总和 II

113. 路径总和 II

作者:互联网

113. 路径总和 II

 

给你二叉树的根节点 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

代码实现:

/**
 * 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:
	vector<vector<int>> pathSum(TreeNode *root, int targetSum)
	{
		if (!root)
			return {};

		vector<vector<int>> result;
		vector<int> temp;
		pathSum(result, temp, root, targetSum);
		return result;
	}

	void pathSum(vector<vector<int>> &res, vector<int> temp, TreeNode *root, int targetSum)
	{
		temp.push_back(root->val);
		targetSum -= root->val;

		if (!root->left && !root->right)
		{
			if (!targetSum)
			{
				res.push_back(temp);
				return;
			}
			return;
		}

		if (root->left)
			pathSum(res, temp, root->left, targetSum);

		if (root->right)
			pathSum(res, temp, root->right, targetSum);
	}
};

 

标签:right,TreeNode,temp,II,targetSum,113,left,root,总和
来源: https://www.cnblogs.com/sunbines/p/16290420.html