给第一个目标值,返回一棵树从根到叶子所有和等于目标值的路径。
经典的深度优先算法
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: void helper(TreeNode* cur, int sum, int target, vector<int>& output, vector<vector<int>>& ret){ //a(cur) //lk("root",cur) //a(sum) //a(target) //dsp if(!cur->left && !cur->right){ if(sum==target){ ret.push_back(output); } return; } if(cur->left){ output.push_back(cur->left->val); helper(cur->left, sum+cur->left->val, target, output, ret); output.pop_back(); } if(cur->right){ output.push_back(cur->right->val); helper(cur->right, sum+cur->right->val, target, output, ret); output.pop_back(); } } vector<vector<int>> pathSum(TreeNode* root, int sum) { vector<int> output; vector<vector<int>> ret; //ahd(root) //a(ret) //a(output) if(!root) return ret; output.push_back(root->val); helper(root, root->val, sum, output, ret); return ret; } };