Path Sum
题目描述
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
.
解题方法
DFS
DFS, 在stack里放一个tuple (node, curSum)
- node就是当前的treeNode
- curSum是到这个node为止的路径的sum
如果node是叶子节点,并且curSum == sum
的时候,就说明有这样一条路径
recursion
recursion的方法就是将sum减去当前node的value,然后不断向下传递
Solution
# 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
stack = []
stack.append((root, root.val))
while stack:
curNode, curSum = stack.pop()
if not curNode.left and not curNode.right and curSum == sum:
return True
if curNode.left:
stack.append((curNode.left, curSum + curNode.left.val))
if curNode.right:
stack.append((curNode.right, curSum + curNode.right.val))
return False
recursion
# 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
if not root.left and not root.right and root.val == sum:
return True
return self.hasPathSum(root.left, sum-root.val) or self.hasPathSum(root.right, sum-root.val)