- 剑指Offer34.二叉树中和为某一值的路径
- 题目:
从根root到叶子节点为一条路径;
返回树root中路径和为sum的路径; - 思路:
路径肯定是从根开始,因此必须是前序遍历;
1.回溯:O(n),O(n)
class Solution {
private:
vector<vector<int>> res;
vector<int> path;
void backtracking(TreeNode* cur, int remain) {
if (!cur) return;
path.push_back(cur->val);
remain -= cur->val;
if (!cur->left && !cur->right && !remain) res.push_back(path);
backtracking(cur->left, remain);
backtracking(cur->right, remain);
path.pop_back();//当需要回退到父节点时,就把当前结点删掉
}
public:
vector<vector<int>> pathSum(TreeNode* root, int sum) {
backtracking(root, sum);
return res;
}
};
- 总结:
再刷