python - leetcode 中的“路径总和”算法有什么问题?
问题描述
我正在练习 leetcode,但陷入了一项测试,无法找出我的错误。任何帮助将不胜感激。
问题:给定二叉树的根和一个整数 targetSum,如果树具有从根到叶的路径,使得沿路径的所有值相加等于 targetSum,则返回 true。
叶是没有子节点的节点。
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
from collections import deque
#code starts from here
class Solution:
def hasPathSum(self, root: TreeNode, targetSum: int) -> bool:
stack = collections.deque()
sum1 = 0
while(1):
while(root != None):
stack.append(root)
sum1 = sum1 + root.val
root = root.left
if(sum1 == targetSum):
return("true")
if(root):
root = stack.pop()
sum1 = sum1 - root.val
root = root.right
else:
break
return("false")
我的代码落在这个测试用例上:
[1,2,3]
5
解决方案
让我们手动浏览您的代码。我将使用连字符来表示每个变量在执行期间给定点的状态。
First iteration of outer while loop:
- stack (top -> bottom = left -> right) = empty
- sum1 = 0
- root = node 1
First iteration of inner while loop:
stack.append(node 1)
sum1 = 0 + 1 = 1
root = node 1.left = node 2
Second iteration of inner while loop:
stack.append(node 2)
sum1 = 1 + 2 = 3
root = node 2.left = None (break)
- stack = node 2, node 1
- sum1 = 3
- root = None
sum1 == 5 is false, so do not return "true"
root = None, break
Outside while loop
return "false"
好吧,您的代码返回了字符串“false”,但预期的布尔值 false。您需要修复的一个更令人担忧的错误是只会检查左侧路径。您需要更改内部 while 循环的逻辑。
例如,您会注意到以下测试用例:
[1, 2, 3]
4
即使正确的路径总和为 4,您的代码也会返回 false(假设您修复了返回类型错误)。这是因为仅遍历了左侧路径 (1, 2)。
推荐阅读
- angular - 身份验证时的Angular RxJS主题问题
- python - 从列表字典创建 MultiIndex 数据框
- javascript - 页面刷新后 Vue.js 按钮重置
- r - 我想从感测器包中删除一个特定术语,这样它就不会影响整体情绪得分
- ruby-on-rails-5 - Rails DirectUploadsController:覆盖#create 方法以添加自定义标头值
- git - Git - 重命名主人,现在参考被破坏
- c - 如何区分是哪个事件导致单片机退出待机/睡眠模式
- vb.net - 如何计算 8 小时工作日的日期之间的小时数并考虑周末?(VB.net)
- swift - 通过点击 Mapkit 中的 Annotation 触发 NavigationLink
- node.js - Sequelize:使用源中的多个键来包含目标模型