LeetCode 113. Path Sum II

来源:互联网 发布:网络直播开场白 编辑:程序博客网 时间:2024/06/14 17:50

Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given sum.

For example:
Given the below binary tree and sum = 22,
              5             / \            4   8           /   / \          11  13  4         /  \    / \        7    2  5   1

return

[   [5,4,11,2],   [5,8,4,5]]

题目要求:

给出一个数sum,要求找到所有的满足根到叶子结点的和为sum的路径。

采用深度遍历的方法,需要注意的有以下两点:

1.结点的值可能为负数;

2由于采用的是同一个vector类型的变量temp来存储路径,因此,需要记得出栈。

算法过程如下:

1.判断结点是否为空,如果为空,则返回;

2.将目标值sum减去结点值root->val,并将该结点加入到vector<int>类型的变量temp中。判断,如果sum值为0,且该结点为叶子结点,则将temp放入结果result中。

什么时候出栈呢?这是重点考虑的问题,如果在遍历之前出栈,那么毫无疑问,子结点的路径中不会有该结点,如果在到达子结点的时候出栈,那么将只有叶子结点出栈,向例子中[5,8,4,2]就会加入11这个结点。因此正确的做法应当是,在遍历子树之后出栈。保证,每次进栈都会有一次出栈。

代码实现如下:

void getResult(TreeNode* root,int sum,vector<int> &temp,vector<vector<int> > &result){if(root==NULL)return ;sum=sum - root->val;temp.push_back(root->val);if(sum==0&&!root->left && !root->right)result.push_back(temp);getResult(root->left,sum,temp,result);getResult(root->right,sum,temp,result);temp.pop_back();}class Solution {public:    vector<vector<int> > pathSum(TreeNode* root, int sum) {    vector<vector<int> > result;    vector<int> temp;        getResult(root,sum,temp,result);        return result;    }};



0 0
原创粉丝点击