查看: 1224| 回复: 18
跳转到指定楼层
上一主题 下一主题
收起左侧

[Leetcode] 112. Path Sum 代码检查半天不知道哪里错了。。。。。。。。。。。。。。。。。。。。

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x

class Solution:
    def hasPathSum(self, root: Optional[TreeNode], targetSum: int) -> bool:
        def dfs(root, summ, targetSum):


            # exit
            if not root:
                return


            # handling
            cursumm = summ + root.val


            if cursumm == targetSum and not root.left and not root.right:
                return True


            # Rec
            dfs(root.left, cursumm, targetSum)
            dfs(root.right, cursumm, targetSum)


        dfs(root, 0, targetSum)
        return False








上一篇:来道题要求NlgN
下一篇:Python,如何判断当前一个树的位置在根部???????????????
推荐
find_advice 2021-8-21 22:40:23 | 只看该作者
全局:
find_advice 发表于 2021-8-21 07:35
1. 加一个 if not cursumm == targetSum and not root.left and not root.right: return False
2. # Rec
...

你原来的写法dfs没有return东西,这种不return的dfs,可以在dfs时候留一个指示位(数组or global变量?)记录dfs最后一层成功与否,并返回这个指示位。如下,用extra代表指示位。
class Solution:
    def hasPathSum(self, root: Optional[TreeNode], targetSum: int) -> bool:
        def dfs(root, summ, targetSum, extra):
            if not root:
                return
            cursumm = summ + root.val
            if cursumm == targetSum and not root.left and not root.right:
                extra[0] = True
            dfs(root.left, cursumm, targetSum, extra)
            dfs(root.right, cursumm, targetSum, extra)
        extra = [False]
        dfs(root, 0, targetSum, extra)
        return extra[0]
lc验证过
PS:可以再加一次米
回复

使用道具 举报

推荐
find_advice 2021-8-21 22:35:16 | 只看该作者
全局:
1. 加一个 if not cursumm == targetSum and not root.left and not root.right: return False
2. # Rec
return dfs(root.left, cursumm, targetSum) or dfs(root.right, cursumm, targetSum)
3. return dfs(root, 0, targetSum) 并删去最后一行

class Solution:
    def hasPathSum(self, root: Optional[TreeNode], targetSum: int) -> bool:
        def dfs(root, summ, targetSum):
            if not root:
                return
            cursumm = summ + root.val
            if cursumm == targetSum and not root.left and not root.right:
                return True
            if (not cursumm == targetSum) and not root.left and not root.right:
                return False
            return dfs(root.left, cursumm, targetSum) or dfs(root.right, cursumm, targetSum)
        return dfs(root, 0, targetSum)

lc验证过
求米
回复

使用道具 举报

推荐
find_advice 2021-8-21 22:52:54 | 只看该作者
全局:
simplify 发表于 2021-8-21 07:48
别急 慢慢来 这个错误我以前也常犯,练多了就好了。另外建议你不要用这样的写代码方式,不要把函数体写在 ...

其实就是dfs要不要return东西的两种写法搞混了,如果想只记一种,加指示位的写法功能可以覆盖return东西的写法
回复

使用道具 举报

🔗
 楼主| ATPtennis 2021-8-21 21:27:21 | 只看该作者
全局:
妄解惑!对于Example1 的例子,输出结果是False
回复

使用道具 举报

全局:
你把原函数空间和递归函数空间搞混了。当你的函数回到原函数空间,只会返回false。
回复

使用道具 举报

🔗
 楼主| ATPtennis 2021-8-21 22:22:52 | 只看该作者
全局:
simplify 发表于 2021-8-21 16:20
你把原函数空间和递归函数空间搞混了。当你的函数回到原函数空间,只会返回false。

真心求问如何更改????????????
回复

使用道具 举报

全局:
你在最后一行返回你调用函数的返回值就行了。如果还有问题,看看discuss就可以了
回复

使用道具 举报

🔗
 楼主| ATPtennis 2021-8-21 22:39:24 | 只看该作者
全局:
simplify 发表于 2021-8-21 16:34
你在最后一行返回你调用函数的返回值就行了。如果还有问题,看看discuss就可以了

谢谢!!你的提醒让我又明白了多一层的东西,谢谢!0基础低级错误总犯。。。。。。。
回复

使用道具 举报

🔗
 楼主| ATPtennis 2021-8-21 22:40:10 | 只看该作者
全局:
find_advice 发表于 2021-8-21 16:35
1. 加一个 if not cursumm == targetSum and not root.left and not root.right: return False
2. # Rec
...

万分感谢!!!!!!!!!!!!真是帮了我大忙了!!赞就不犹豫。
回复

使用道具 举报

🔗
 楼主| ATPtennis 2021-8-21 22:41:17 | 只看该作者
全局:
find_advice 发表于 2021-8-21 16:35
1. 加一个 if not cursumm == targetSum and not root.left and not root.right: return False
2. # Rec
...

我没找到送米的选项,怎么弄?不会弄

评分

参与人数 1大米 +1 收起 理由
find_advice + 1 欢迎来一亩三分地论坛!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表