LeetCode #112 Path Sum

Problem

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.

Example

Given the below binary tree and sum = 22,

1
2
3
4
5
6
7
      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.

Note

A leaf is a node with no children.

Solution

Method: Depth-first Search

Time Complexity: O(n)

Space Complexity: O(n)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None

class Solution:
def hasPathSum(self, root, sum):
"""
:type root: TreeNode
:type sum: int
:rtype: bool
"""
stack = [(root, 0, False)]

while stack:
node, pre_val, visited = stack.pop()

if node:
if not visited:
stack.append((node, pre_val, True))
pre_val += node.val

if pre_val == sum and \
not node.left and \
not node.right:
return True

stack.append((node.left, pre_val, False))
stack.append((node.right, pre_val, False))

return False