二叉树中和为某一值的路径(剑指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};