https://leetcode.com/problems/path-sum/
对于tree的问题,一定要注意使用dfs,bfs. 这里用dfs就是用preorder traverse。遍历左右subtree。
my code:
这里要注意考虑root没有儿子,只有一个儿子,有两个儿子的情况。当只有一个儿子的时候,就只有一个叶子节点,另外一边可以看做一个false的叶子节点。所以在递归里面要判断root是否为none,如果是none,那么则返回false
class Solution(object):
def dfs(self, root, mysum, target_sum):
if not root:#当root只有一个儿子的时候
return False
elif root.left == None and root.right == None:
mysum += root.val#这里要把当前root节点的val加上之后再判断
if mysum == target_sum:
return True
else:
return False
else:
mysum += root.val
a = self.dfs(root.left, mysum, target_sum)
b = self.dfs(root.right, mysum, target_sum)
return a or b
def hasPathSum(self, root, sum):
"""
:type root: TreeNode
:type sum: int
:rtype: bool
"""
mysum = 0
if root == None:
return False
else:
return self.dfs(root,mysum, sum)
更简单的思路,递归减小sum。
参考http://www.cnblogs.com/zuoyuan/p/3722004.html
class Solution:
# @param root, a tree node
# @param sum, an integer
# @return a boolean
def hasPathSum(self, root, sum):
if root == None:
return False
if root.left == None and root.right == None:
return root.val == sum
return self.hasPathSum(root.left, sum - root.val) or self.hasPathSum(root.right, sum - root.val)