1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
|
#include <iostream> #include <vector> using namespace std;
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) {} };
vector<vector<int>> ans; vector<int> cur_path;
vector<vector<int>> pathSum(TreeNode* root, int target) { if (root == nullptr) { return ans; } cur_path.push_back(root->val); if (root->val == target && root->left == nullptr && root->right == nullptr) { ans.push_back(cur_path); } pathSum(root->left, target - root->val); pathSum(root->right, target - root->val); if (cur_path.size() > 0) { cur_path.pop_back(); } return ans; }
int main() { TreeNode *left1 = new TreeNode(1); TreeNode *right = new TreeNode(3); TreeNode *right1 = new TreeNode(5); TreeNode *left = new TreeNode(2, left1, right1); TreeNode *root = new TreeNode(2, left, right); pathSum(root, 5); for (int i = 0; i < ans.size(); i++) { for(int j = 0; j < ans[i].size(); j++) { cout << ans[i][j] << " "; } cout << endl; } return 0; }
|