#include <iostream> #include <vector> #include <queue> using namespace std; struct TreeNode { int val; TreeNode *left, *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; vector<vector<int> > v; class Solution { public: void dfs(TreeNode *p, int cur, int sum, vector<int> v1) //v1若传引用结果为 5 4 11 2 、 5 4 11 2 8 4 5 { if(!p) return; if(!p->left && !p->right) { if(cur + p->val == sum) { v1.push_back(p->val); v.push_back(v1); } return; } v1.push_back(p->val); dfs(p->left, cur + p->val, sum, v1); dfs(p->right, cur + p->val, sum, v1); } vector<vector<int> > pathSum(TreeNode *root, int sum) { v.clear(); //少了这句就WA vector<int> v1; dfs(root, 0, sum, v1); return v; } }; int main(void) { TreeNode *root = new TreeNode(5); TreeNode *node1 = new TreeNode(4); root->left = node1; TreeNode *node2 = new TreeNode(8); root->right = node2; TreeNode *node3 = new TreeNode(11); node1->left = node3; TreeNode *node4 = new TreeNode(13); node2->left = node4; TreeNode *node5 = new TreeNode(4); node2->right = node5; TreeNode *node6 = new TreeNode(7); node3->left = node6; TreeNode *node7 = new TreeNode(2); node3->right = node7; TreeNode *node9 = new TreeNode(5); node5->left = node9; TreeNode *node8 = new TreeNode(1); node5->right = node8; Solution s; vector<vector<int> > vv = s.pathSum(root, 22); for(vector<vector<int> >::iterator iter = vv.begin(); iter != vv.end(); ++iter) { vector<int> t = *iter; for(vector<int>::iterator iter2 = t.begin(); iter2 != t.end(); ++iter2) { cout << *iter2 << " "; } cout << endl; } return 0; }