18.二叉树中和为某一值的路径
题目内容:
代码及思路:
#include<iostream>
#include<vector>
using namespace std;
struct TreeNode
{
int val;
TreeNode* left;
TreeNode* right;
};
class solution
{
public:
vector<vector<int>> path;
vector<int> res;
void buildTree(TreeNode** root)
{
int temp;
cin >> temp;
if (temp == 0)
{
(*root)->val = 0;
(*root) = nullptr;
return;
}
else
{
(*root)->val = temp;
(*root)->left = new TreeNode;
buildTree(&(*root)->left);
(*root)->right = new TreeNode;
buildTree(&(*root)->right);
}
}
vector<vector<int>> findpath(TreeNode* root, int target)
{
vector<vector<int>> res;
vector<int> path;
int path_value = 0;
findpathcore(root, res, path, target, path_value);
return res;
}
private:
void findpathcore(TreeNode* root, vector<vector<int>>& res, vector<int>& path, int target, int& path_value)
{
if (root == nullptr)
return;
path_value += root->val;
path.push_back(root->val);
if (!root->left && !root->right&&path_value == target)
{
res.push_back(path);
}
findpathcore(root->left, res, path, target, path_value);
findpathcore(root->right, res, path, target, path_value);
path_value -= root->val;
path.pop_back();
}
};
void main()
{
solution* object = new solution;
TreeNode* root = new TreeNode;
object->buildTree(&root);
vector<vector<int>> result;
int expectnum;
cin >> expectnum;
result =object->FindPath(root, expectnum);
for (int i = 0; i < result.size(); i++)
{
result.resize(result.size());
for (int j = 0; j < result[0].size(); j++)
{
cout << result[i][j] << endl;
}
}
}