Path Sum - LeetCode
Posted multhree
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Path Sum - LeetCode相关的知识,希望对你有一定的参考价值。
题目链接
注意点
- 不要访问空结点
- val会有负值
解法
解法一:递归,DFS。首先判空,若当前结点不存在,则直接返回false,如果如果输入的是一个叶节点,则比较当前叶节点的值和参数sum值是否相同,若相同,返回true,否则false。 这个条件也是递归的终止条件。接下来就开始递归,对非叶节点开始判断,左右子树都进行判断。
/**
* Definition for a binary tree node.
* 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) return false;
if(root->val == sum && !root->left && !root->right) return true;
return hasPathSum(root->left,sum-(root->val)) || hasPathSum(root->right,sum-(root->val));
}
};
解法二:非递归,先序遍历。先序遍历二叉树,左右子结点都需要加上其父结点值,这样当遍历到叶结点时,如果和sum相等了,那么就说明一定有一条从root过来的路径。。
/**
* Definition for a binary tree node.
* 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) return false;
stack<TreeNode*> s;
s.push(root);
while(!s.empty())
{
TreeNode* n = s.top();s.pop();
if(!n->left&&!n->right)
{
if(n->val == sum) return true;
}
if(n->left)
{
n->left->val += n->val;
s.push(n->left);
}
if(n->right)
{
n->right->val += n->val;
s.push(n->right);
}
}
return false;
}
};
小结
以上是关于Path Sum - LeetCode的主要内容,如果未能解决你的问题,请参考以下文章
[LeetCode]题解(python):112 Path Sum