- Binary Tree Path Sum
中文English
Given a binary tree, find all paths that sum of the nodes in the path equals to a given number target.
A valid path is from root node to any of the leaf nodes.
Example
Example 1:
Input:
{1,2,4,2,3}
5
Output: [[1, 2, 2],[1, 4]]
Explanation:
The tree is look like this:
1
/
2 4
/
2 3
For sum = 5 , it is obviously 1 + 2 + 2 = 1 + 4 = 5
Example 2:
Input:
{1,2,4,2,3}
3
Output: []
Explanation:
The tree is look like this:
1
/
2 4
/
2 3
Notice we need to find all paths from root node to leaf nodes.
1 + 2 + 2 = 5, 1 + 2 + 3 = 6, 1 + 4 = 5
There is no one satisfying it.
解法1:DFS
代码如下:
/**
* Definition of TreeNode:
* class TreeNode {
* public:
* int val;
* TreeNode *left, *right;
* TreeNode(int val) {
* this->val = val;
* this->left = this->right = NULL;
* }
* }
*/
class Solution {
public:
/*
* @param root: the root of binary tree
* @param target: An integer
* @return: all valid paths
*/
vector<vector<int>> binaryTreePathSum(TreeNode * root, int target) {
if (!root) return vv;
vector<int> v;
helper(root, target, v);
return vv;
}
private:
vector<vector<int>> vv;
void helper(TreeNode * root, int target, vector<int> & v) {
if (!root) return;
if (target == root->val && !root->left && !root->right) {
v.push_back(target);
vv.push_back(v);
v.pop_back();
return;
}
v.push_back(root->val);
helper(root->left, target - root->val, v);
helper(root->right, target - root->val, v);
v.pop_back();
}
};