思路:中序递归遍历或者先序递归遍历,栈中所存结点为当前结点的所有祖先结点,因此设置一个vector用来存储当前栈中的结点值,当走到叶子结点时,判断当前的结点和是否为给定值,弹出结点,每一轮递归返回到父结点时,当前路径也应该回退一个结点
class Solution { vector<vector<int> > result; vector<int> tmp; public: vector<vector<int> > FindPath(TreeNode* root,int expectNumber) { if(root){ tmp.push_back(root->val); if(!root->left && !root->right){ if(sum(tmp) == expectNumber) result.push_back(tmp); } FindPath(root->left,expectNumber); FindPath(root->right,expectNumber); tmp.pop_back(); } return result; } int sum(vector<int> v){ int sum = 0; for(int i=0;i<v.size();i++){ sum+=v[i]; } return sum; } };
优化:
class Solution { vector<vector<int> > result; vector<int> tmp; public: vector<vector<int> > FindPath(TreeNode* root,int expectNumber) { if(root){ tmp.push_back(root->val); if(!root->left && !root->right && root->val == expectNumber) result.push_back(tmp); FindPath(root->left,expectNumber-root->val); FindPath(root->right,expectNumber-root->val); tmp.pop_back(); } return result; } };
原文:https://www.cnblogs.com/ttzz/p/13514627.html