- 分析
使用递归的方法,使用一个vector记录走过的路径。通过这个题,学习怎么求二叉树的路径,求二叉树中两个给定节点的最近公共祖先也是用类似的思想,那么应该怎么求呢???
- 代码
/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {
public:void mypathSum(TreeNode* root, int sum, vector<vector<int>> & vec, vector<int> temp){if(root == nullptr) return;sum -= root -> val;if(sum != 0 || (sum == 0 && (root -> left != nullptr || root -> right != nullptr))){temp.push_back(root -> val);mypathSum(root -> left, sum, vec, temp);mypathSum(root -> right, sum, vec, temp);}else{if(root -> left == nullptr && root -> right == nullptr){temp.push_back(root -> val);vec.push_back(temp); }}}vector<vector<int>> pathSum(TreeNode* root, int sum) {vector<vector<int>> ans;vector<int> temp;mypathSum(root, sum, ans, temp);return ans;}
};