-
Notifications
You must be signed in to change notification settings - Fork 420
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
weiy
committed
Aug 1, 2018
1 parent
fd71903
commit b3f287c
Showing
2 changed files
with
125 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
""" | ||
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. | ||
Note: A leaf is a node with no children. | ||
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. | ||
给一颗二叉树和一个值,找到从根到叶的所有路径的和中是否有一个与给定的值相当。 | ||
因为只要有一个就可以了,所以直接用深度优先,最差是 O(n)。 | ||
测试用例: | ||
https://leetcode.com/problems/path-sum/description/ | ||
""" | ||
# 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 | ||
|
||
def helper(prev, root, sum): | ||
if prev + root.val == sum: | ||
if not root.left and not root.right: | ||
return True | ||
|
||
if root.left: | ||
if helper(prev + root.val, root.left, sum): | ||
return True | ||
|
||
if root.right: | ||
if helper(prev + root.val, root.right, sum): | ||
return True | ||
|
||
return False | ||
|
||
return helper(0, root, sum) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
""" | ||
Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given sum. | ||
Note: A leaf is a node with no children. | ||
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] | ||
] | ||
PathSum 的进阶版,输出所有符合条件的路径。所以这里直接用遍历,有负数加上不是二叉搜索树应该没太多需要优化的地方。 | ||
测试用例: | ||
https://leetcode.com/problems/path-sum-ii/description/ | ||
""" | ||
# 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 [] | ||
|
||
result = [] | ||
|
||
def helper(prev, root, sum, path): | ||
if prev + root.val == sum: | ||
if not root.left and not root.right: | ||
result.append(list(map(int, path.split(' ')[1:]))+[root.val]) | ||
return True | ||
|
||
if root.left: | ||
helper(prev + root.val, root.left, sum, path=path+" "+str(root.val)) | ||
# return True | ||
|
||
if root.right: | ||
helper(prev + root.val, root.right, sum, path=path+" "+str(root.val)) | ||
|
||
return False | ||
|
||
helper(0, root, sum, "") | ||
|
||
return result |