描述

输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。

image.png


题解

这道题的具体解法,可参看 Krahets的题解

  1. /**
  2. * Definition for a binary tree node.
  3. * struct TreeNode {
  4. * int val;
  5. * TreeNode *left;
  6. * TreeNode *right;
  7. * TreeNode() : val(0), left(nullptr), right(nullptr) {}
  8. * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
  9. * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
  10. * };
  11. */
  12. class Solution {
  13. public:
  14. vector<int> path;
  15. vector<vector<int>> result;
  16. vector<vector<int>> pathSum(TreeNode* root, int target) {
  17. dfs(root, target);
  18. return result;
  19. }
  20. void dfs(TreeNode* root, int target) {
  21. if(root == nullptr) return;
  22. path.push_back(root->val);
  23. target -= root->val;
  24. if(target == 0 && root->left == nullptr && root->right == nullptr) {
  25. result.emplace_back(path); // emplace_back 是 push_back 的性能优化版方法
  26. }
  27. dfs(root->left, target);
  28. dfs(root->right, target);
  29. path.pop_back();
  30. }
  31. };