输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。 示例: 给定如下二叉树,以及目标和 target = 22,
5
/ \
4 8
/ / \
11 13 4
/ \ / \
7 2 5 1
返回:
[
[5,4,11,2],
[5,8,4,5]
]
解:回溯回溯 注意叶子节点得加上才能,判断:
class Solution {
vector<vector<int>> result;
vector<int> path;
public:
vector<vector<int>> pathSum(TreeNode* root, int target) {
backstracking(root, target, 0);
return result;
}
void backstracking(TreeNode* root, int target, int nowSum) {
if (root == nullptr) return ;
path.push_back(root -> val);
nowSum += root -> val;
if (root->left == nullptr && root->right == nullptr && nowSum== target) {
result.push_back(path);
}
backstracking(root -> left, target, nowSum);
backstracking(root -> right, target, nowSum);
nowSum -= root -> val;
path.pop_back();
}
};
|