题目:
输入一颗二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。
路径:从根节点出发到叶节点形成的一条路径。
解法:
1、利用栈的原理。将前序遍历将节点压入栈中后,利用递归检查完其左右节点形成的路径是否满足题目要求后返回。
2、子节点检查完毕后,弹出对应的根节点。
代码如下:
vector<vector<int> > FindPath(TreeNode* root,int expectNumber) {
vector<vector<int>> res;
vector<int> temp;
if(root ==NULL)
return res;
dfs(root,expectNumber,res,temp);
return res;
}
void dfs(TreeNode* node,int expectNumber,vector<vector<int>> &res,vector<int> temp)
{ //前序遍历的过程,利用动态数组模拟栈的进出方式
temp.push_back(node->val);
if(expectNumber-node->val ==0 && node->left==NULL && node->right==NULL)
res.push_back(temp);
else
{
if(node->left!=NULL) dfs(node->left,expectNumber - node->val,res,temp);
if(node->right!=NULL) dfs(node->right,expectNumber - node->val,res,temp);
}
temp.pop_back();
}