【题目描述】
输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
【函数形式】
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
vector<vector<int> > FindPath(TreeNode* root,int expectNumber)
{
}
【解题思路】
利用深度优先遍历,将所有路径存储在二维矩阵里,再逐个计算每条路径的和,如果和为目标值,那么push_back到待输出的二维矩阵中
【代码如下】
public:
vector<vector<int> > FindPath(TreeNode* root,int expectNumber) {
vector<int> a;
vector<vector<int>> r;
function(root,a);
int m = sum.size();
int x = 0;
for(int i = 0; i < m; i++)
{
x = 0;
for(int j = 0; j < sum[i].size(); j++)
{
x += sum[i][j];
}
if(x == expectNumber)
{
r.push_back(sum[i]);
}
}
return r;
}
void function(TreeNode* root,vector<int> a)
{
if(root == NULL)
return;
if(root->left == NULL && root->right == NULL)
{
a.push_back(root->val);
sum.push_back(a);
}
else
{
a.push_back(root->val);
function(root->left,a);
function(root->right,a);
}
}
private:
vector<vector<int>> sum;