Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given sum.
For example:Given the below binary tree and
sum = 22
,
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> > res; if(!root) return res; vector<int> temp; temp.push_back(root->val); childPathSum(res, temp, root, sum); return res; } void childPathSum(vector<vector<int> > &res, vector<int> &temp, TreeNode *root, int sum) { if(!root->left && !root->right && root->val == sum) { res.push_back(temp); } if(root->left) { temp.push_back(root->left->val); childPathSum(res, temp, root->left, sum - root->val); temp.pop_back(); } if(root->right) { temp.push_back(root->right->val); childPathSum(res, temp, root->right, sum - root->val); temp.pop_back(); } } };