边工作边刷题:70天一遍leetcode: day 16-3
Path Sum I/II
同上,preorder搞定。这题竟然犯了2个错误。
错误点
- pop不能发生在入左右子树之后
- 每个节点对应的sum值是减去该节点的val,所以root初始要减去val
II用递归做的。递归里,root不为None,而且在外层更新sum,内层只是中止条件判断(sum为0,左右为空)
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def hasPathSum(self, root, sum):
"""
:type root: TreeNode
:type sum: int
:rtype: bool
"""
if not root: return False
stk = [(root, sum-root.val)]
while stk:
cur = stk[-1][0]
s = stk[-1][1]
stk.pop()
if not cur.left and not cur.right and s==0:
return True
if cur.left:
stk.append((cur.left, s-cur.left.val))
if cur.right:
stk.append((cur.right, s-cur.right.val))
#print stk
return False