【剑指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()

posted @ 2021-02-28 13:44  tmpUser  阅读(38)  评论(0编辑  收藏  举报