0%

path-sum-ii

题目描述

给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。

说明: 叶子节点是指没有子节点的节点。

题解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
bool isPath(TreeNode* root, int sum, vector<int>& tmp, vector<vector<int>>& res) {
if (!root) {
return false;
}
if (!root->left && !root->right&&root->val == sum) {
tmp.push_back(root->val);
res.push_back(tmp);
tmp.pop_back();
return true;
}
tmp.push_back(root->val);
bool f1 = isPath(root->left, sum - root->val, tmp, res);
bool f2 = isPath(root->right, sum - root->val, tmp, res);
tmp.pop_back();
return f1 || f2;
}
vector<vector<int>> pathSum(TreeNode* root, int sum) {
vector<vector<int>> res;
vector<int> tmp;
isPath(root, sum, tmp, res);
return res;
}

效率还不错。注意什么时候压入,什么时候需要弹出。