二叉树中和为某一值的路径(c++)

题目描述:
输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)

解题思路:
本题采用有记忆的dfs方式,每走一步,将目标值s减掉该节点的值的结果作为下一步递归的目标值,递归求解,如果递归到最后叶节点,如果剩余的目标值等于叶节点的值,那么说明该条路径满足,保存该路径。

代码如下:
class Solution {
public:
vector<vector< int > FindPath(TreeNode* root,int expectNumber) {
vector<vector< int >> ret;
vector < int > trace;
if(root)
{
dfs(root,expectNumber,ret,trace);
}
return ret;
}
void dfs(TreeNode* root,int s,vector<vector< int >>&ret,vector< int > &trace)
{
trace.push_back(root->val);
if(!root->left && !root->right)
if(root->val == s)
ret.push_back(trace);
if(root->left)
dfs(root->left,s-root->val,ret,trace);
if(root->right)
dfs(root->right,s-root->val,ret,trace);
trace.pop_back();
}
};

猜你喜欢

转载自blog.csdn.net/weixin_42615157/article/details/87374267