Given a binary tree and a sum, find all root-to-leaf paths where each path‘s sum equals the given sum.
For example: 5
/ 4 8
/ / 11 13 4
/ \ / 7 2 5 1
return
[ [5,4,11,2], [5,8,4,5] ]
回溯法的思想。
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: vector<vector<int> > pathSum(TreeNode *root, int sum) { vector<vector<int>> rstv; vector<int> tmpv; findSub(root,sum,rstv,tmpv); return rstv; } void findSub(TreeNode*root,int sum,vector<vector<int>> &rstv,vector<int> &tmpv){ if (!root) return; tmpv.push_back(root->val); if (!root->left && !root->right && root->val == sum){ rstv.push_back(tmpv); tmpv.pop_back(); return; } if (root->left) findSub(root->left, sum-root->val, rstv, tmpv); if (root->right) findSub(root->right, sum - root->val, rstv, tmpv); tmpv.pop_back(); } };
LeetCode之Path Sum II,布布扣,bubuko.com
原文:http://blog.csdn.net/smileteo/article/details/22876961