给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。
说明: 叶子节点是指没有子节点的节点。
示例:
给定如下二叉树,以及目标和 sum = 22,
递归 要注意终止条件,以及 缓存数组中什么时候进入元素 和出元素。即到该节点的时候,该节点的数值进入数组,当左子树和右子树搜索完毕的时候,当前节点值出缓存数组。
class solution
{
vector<vector<int>> res;
vector<int> temp;//缓存数组
void Search_Path(TreeNode* root, int sum)//搜索函数
{
if (root == NULL)
return;
else
{
temp.push_back(root->val);
if (!root->left && !root->right)//到达叶子节点
{
if (sum == root->val)//判断是否满足累加和 是sum
{
res.push_back(temp);
}
}
Search_Path(root->left, sum - root->val);//搜索左子树
Search_Path(root->right, sum - root->val);//搜索右子树
temp.pop_back();//出缓存数组 ,这个终止条件尤为重要
}
}
vector<vector<int>> pathSum(TreeNode* root, int sum)
{
Search_Path(root, sum);
return res;
}
};