题目链接:113. 路径总和 II
题解:
和上一题类似,简单递归!
题目简述:
和上一题类似,多加了一个记录路径的要求!
题解:
递归:
- 根节点为空直接返回
- 将当前节点加入路径
- 答案条件:到了叶子结点并且
sum
减到了0
- 左子树不空递归左子树
- 右子树不空递归右子树
- 将当前加点删掉,恢复状态
由于要走遍所有情况,所以和上一题相比少了一个都不空的情况!
时间复杂度:遍历所有节点为O(n)
,记录所有路径为O(n)
,总复杂度为O(n^2)
AC代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
class Solution { public: vector<vector<int>> res; vector<int> path; vector<vector<int>> pathSum(TreeNode* root, int sum) { dfs(root, sum); return res; } void dfs(TreeNode* root, int sum){ if(!root) return; path.push_back(root->val); sum -= root->val; if(!root->left && !root->right){ if(sum == 0) res.push_back(path); } if(root->left) dfs(root->left, sum); if(root->right) dfs(root->right, sum); path.pop_back(); } };
|