Path Sum II
Question
Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given sum.
For example:
Given the below binary tree and sum = 22
,
5
/ \
4 8
/ / \
11 13 4
/ \ / \
7 2 5 1
return
[
[5,4,11,2],
[5,8,4,5]
]
Tags
- Tree
- DFS
Thought
This is similar to the previous problem. We still implemented with two different approaches for DFS algorithm:
- stack
- recursion
Code
stack
# 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 pathSum(self, root, sum):
"""
:type root: TreeNode
:type sum: int
:rtype: List[List[int]]
"""
if not root:
return []
stack = [(0, [], root)]
result = []
while stack:
acc, tmp, ptr = stack.pop()
if ptr.left:
stack.append((acc + ptr.val, tmp + [ptr.val], ptr.left))
if ptr.right:
stack.append((acc + ptr.val, tmp + [ptr.val], ptr.right))
if not ptr.left and not ptr.right and acc + ptr.val == sum:
result.append(tmp + [ptr.val])
return result
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 pathSum(self, root, sum):
"""
:type root: TreeNode
:type sum: int
:rtype: List[List[int]]
"""
if not root:
return []
if not root.left and not root.right:
if sum == root.val:
return [[root.val]]
else:
return []
current = self.pathSum(root.left, sum - root.val) + self.pathSum(root.right, sum - root.val)
return [[root.val] + item for item in current]