【剑指Offer-34】二叉树中和为某一值的路径
问题
输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。
示例
解答
class Solution {
public:
vector<vector<int>> pathSum(TreeNode* root, int sum) {
backTrace(root, sum);
return res;
}
private:
vector<vector<int>> res;
vector<int> ans;
void backTrace(TreeNode* root, int sum) {
if (!root) return;
ans.push_back(root->val);
if (sum == root->val && !root->left && !root->right) res.push_back(ans);
backTrace(root->left, sum - root->val);
backTrace(root->right, sum - root->val);
ans.pop_back();
}
};
重点思路
很典型的一道二叉树路径搜索问题,基本思想是前序遍历+回溯。需要注意的是,回溯过程中需要一个容器存储路径,在回溯返回时需要将该节点删除,也就是代码中的pop_back()
。