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
 1 #include 
 2 #include 
 3 
 4 using namespace std;
 5 
 6 /**
 7     Definition for a binary tree node.
 8  */
 9 struct TreeNode {
10     int val;
11     TreeNode *left;
12     TreeNode *right;
13     TreeNode() : val(0), left(nullptr), right(nullptr) {}
14     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
15     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
16 };
17 
18 class Solution {
19 public:
20     void pathSumHelper(TreeNode *node, int sum, vector<int> path, vectorint>> &answer) {
21         if (node == nullptr) {
22             return;
23         }
24         path.push_back(node->val);
25         sum -= node->val;
26         // 当到达叶子节点且剩余节点总和为0时,该路径符合条件
27         if (sum == 0 && node->left == nullptr && node->right == nullptr) {
28             answer.push_back(path);
29         }
30         pathSumHelper(node->left, sum, path, answer);
31         pathSumHelper(node->right, sum, path, answer);
32         return;
33     }
34     vectorint>> pathSum(TreeNode* root, int targetSum) {
35         vectorint>> answer;
36         if (root == nullptr) {
37             return answer;
38         }
39         vector<int> path;
40         pathSumHelper(root, targetSum, path, answer);
41         return answer;
42     }
43 };
44 
45 int main()
46 {
47     TreeNode node1 = TreeNode(5);
48     TreeNode node2 = TreeNode(4);
49     TreeNode node3 = TreeNode(8);
50     TreeNode node4 = TreeNode(11);
51     TreeNode node5 = TreeNode(13);
52     TreeNode node6 = TreeNode(4);
53     TreeNode node7 = TreeNode(7);
54     TreeNode node8 = TreeNode(2);
55     TreeNode node9 = TreeNode(5);
56     TreeNode node10 = TreeNode(1);
57     node1.left = &node2;
58     node1.right = &node3;
59     node2.left = &node4;
60     node3.left = &node5;
61     node3.right = &node6;
62     node4.left = &node7;
63     node4.right = &node8;
64     node6.left = &node9;
65     node6.right = &node10;
66 
67     Solution *test = new Solution();
68     vectorint>> answer;
69     int targetSum = 22;
70     answer = test->pathSum(&node1, targetSum);
71     for (const auto &vec : answer) {
72         for (const auto &val : vec) {
73             cout << val << " ";
74         }
75         cout << endl;
76     }
77     system("pause");
78     return 0;
79 }

测试结果: