利用回溯求解,注意判断退出条件
class Solution { public: /** * * @param root TreeNode类 * @param sum int整型 * @return int整型vector<vector<>> */ vector<int> vec; vector<vector<int>> ans; void getpath(TreeNode* root, int sum, int path){ if(root==nullptr) return; if(!root->left && !root->right){ if(path+root->val==sum){ vec.push_back(root->val); ans.push_back(vec); vec.pop_back(); return; } return; } vec.push_back(root->val); path+=root->val; getpath(root->left, sum, path); path-=root->val; vec.pop_back(); vec.push_back(root->val); path+=root->val; getpath(root->right,sum, path); path-=root->val; vec.pop_back(); } vector<vector<int> > pathSum(TreeNode* root, int sum) { vec.clear(); ans.clear(); if(root == nullptr) return {}; getpath(root,sum,0); return ans; } };