题目链接:https://leetcode-cn.com/problems/path-sum-ii/
题目描述
给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。
说明: 叶子节点是指没有子节点的节点。
示例:
给定如下二叉树,以及目标和 sum = 22
,
5
/ \
4 8
/ / \
11 13 4
/ \ / \
7 2 5 1
返回:
[
[5,4,11,2],
[5,8,4,5]
]
思路
先序遍历二叉树,用一个数组curr
存储当前路径,记得回溯时pop_back()
尾元素
代码
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
/*
* 先序遍历 回溯
*/
class Solution {
public:
vector<vector<int>> pathSum(TreeNode* root, int sum) {
vector<vector<int>> ret;
if(!root) return ret;
vector<int> curr; // 当前路径
hasPathSum(root, sum, curr, ret);
return ret;
}
private:
void hasPathSum(TreeNode* root, int sum, vector<int>& curr, vector<vector<int>>& ret) {
sum -= root->val;
curr.push_back(root->val);
if(sum == 0 && !root->left && !root->right) {
ret.push_back(curr); // 满足条件打印
return ;
}
if(root->left){
hasPathSum(root->left, sum,curr,ret);
curr.pop_back(); // 回溯
}
if(root->right){
hasPathSum(root->right,sum,curr,ret);
curr.pop_back(); // 回溯
}
}
};