题目链接:https://leetcode.com/problems/path-sum/
Runtimes:20
1、问题
Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all the values along the path equals the given sum.
For example:
Given the below binary tree and sum = 22,
5 / \ 4 8 / / \ 11 13 4 / \ \ 7 2 1
return true, as there exist a root-to-leaf path 5->4->11->2 which sum is 22.
2、分析
找到根到叶子节点的和为sum的路径。用深度搜索会比较好一些,节省时间,另外一点是要求非递归思路。
3、小结
出现几点需要注意,1、没注意题目中根到叶节点的路径要求 2、没考虑如果出现负数的情况,那么就没有截枝的可能,比如某一节点如果出现值大于sum,不能截枝,因为有可能是负数。
4、实现
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
bool hasPathSum(TreeNode *root, int sum) {
if(root == NULL)
{
return false;
}
vector <int> vi;
vector <TreeNode *> vt;
vi.push_back(root->val);
vt.push_back(root);
while(vt.size() > 0 && vi.size() > 0)
{
int val = vi.back(); vi.pop_back();
TreeNode *p = vt.back(); vt.pop_back();
if(val == sum && p->left == NULL && p->right == NULL)
return true;
if(p->right != NULL)
{
vi.push_back(val + p->right->val);
vt.push_back(p->right);
}
if(p->left != NULL)
{
vi.push_back(val + p->left->val);
vt.push_back(p->left);
}
}
return false;
}
};
5、反思
不错的题目,又写了一会非递归深度优先搜索。