二叉树中和为某一值的路径(剑指Offer-34)

题面

请实现两个函数,分别用来序列化和反序列化二叉树。

示例

给定如下二叉树,以及目标和 target = 22

1              5
2             / \
3            4   8
4           /   / \
5          11  13  4
6         /  \    / \
7        7    2  5   1

返回:

1[
2   [5,4,11,2],
3   [5,8,4,5]
4]

提示

节点总数 <= 10000

思路

dfs遍历即可,注意路径是根节点到叶子结点。

代码

 1/**
 2 * Definition for a binary tree node.
 3 * struct TreeNode {
 4 *     int val;
 5 *     TreeNode *left;
 6 *     TreeNode *right;
 7 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 8 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 9 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
10 * };
11 */
12class Solution {
13    vector<vector<int> > ans;
14    vector<int> v;
15    void dfs(TreeNode *rt, int n){
16        if(rt == nullptr) return;
17        n -= rt->val;
18        v.push_back(rt->val);
19        if(n || rt->left || rt->right){
20            dfs(rt->left, n);
21            dfs(rt->right, n);
22        }else{
23            ans.push_back(v);
24        }
25        v.pop_back();
26    }
27public:
28    vector<vector<int>> pathSum(TreeNode* root, int target) {
29        dfs(root, target);
30        return ans;
31    }
32};