一、题意
二、思考过程
路径总和II和I的区别就是:
路径总和II要遍历整个树,找到所有路径,所以递归函数不要返回值。
class Solution { public: vector<vector<int>> result; vector<int> path; //递归不需要返回值,因为我们要遍历整个树 void traversal(TreeNode *cur,int count) { //遇到了叶子节点,并且找到了he为sum的路径 if(!cur->left&&!cur->right&&count==0) { result.push_back(path); return; } if(!cur->left&&!cur->right) return;//遇到叶子节点而没有找到合适的边,直接返回 if(cur->left)//左 { path.push_back(cur->left->val); count-=cur->left->val; traversal(cur->left,count);//递归 count+=cur->left->val;//回溯 path.pop_back();//回溯 } if(cur->right) { path.push_back(cur->right->val); count-=cur->right->val; traversal(cur->right,count);//递归 count+=cur->right->val;//回溯 path.pop_back();//回溯 } return ; } vector<vector<int>> pathSum(TreeNode* root, int targetSum) { result.clear(); path.clear(); if(root==NULL) return result; path.push_back(root->val);//把根节点放进路径 traversal(root,targetSum-root->val); return result; } }; ,targetSum-root->val); return result; } };