时间限制:1秒 空间限制:32768K
题目描述
输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)
/**
*思路:递归向下进行左右子树遍历,当遇到和为target的节点为叶子节点时
* 便找到一条路径。
* 注意的是题目要求将长度打的数组考前,所以存放时应该是头插
*/
代码:
C++:
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
vector<vector<int>> res;
vector<int> tmp;
vector<vector<int> > FindPath(TreeNode* root,int expectNumber) {
if(root == NULL)
return res;
tmp.push_back(root->val);
if((expectNumber - root->val) == 0 && root->right == NULL && root->left == NULL)
res.insert(res.begin(), tmp);
FindPath(root->right, expectNumber - root->val);
FindPath(root->left, expectNumber - root->val);
if(tmp.size() != 0)
tmp.pop_back();
return res;
}
};
Java:
import java.util.ArrayList;
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
private ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();
private ArrayList<Integer> tmp = new ArrayList<Integer>();
public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int target) {
if(root == null)
return res;
tmp.add(root.val);
if(target - root.val == 0 && root.right == null && root.left == null)
res.add(0,new ArrayList<Integer>(tmp));
FindPath(root.right, target - root.val);
FindPath(root.left, target - root.val);
tmp.remove(tmp.size() - 1);
return res;
}
}