https://leetcode.com/problems/binary-tree-paths/
经典题目。就是DFS搜索。注意这个模板,当前node的value_str已经被上一层加过了。不要再在当前function里面加上value_str
注意 思考的时候,模拟 “当前node”, “left sub tree” and “right sub tree”.
注意 这里用res来收集结果的时候,如果每个path用list来表示,那么在res.append之后,如果再修改这个list的话,res中已经被append的list也会相应更改,因为他们是同一个object,是shadow copy
而对于string,是deep copy。res.append之后,string的修改不影响res中的结果
class Solution(object):
def dfs(self,root,res, value_str):
if root.left == None and root.right == None:
res.append(value_str)
if root.left:
self.dfs(root.left, res, value_str + '->' + str(root.left.val) )#注意在这里改变value_str的值
if root.right:
self.dfs(root.right, res, value_str + '->' + str(root.right.val))#注意在这里改变value_str的值
def binaryTreePaths(self, root):
"""
:type root: TreeNode
:rtype: List[str]
"""
if root == None: return []
res = []
valuelist = str(root.val)
self.dfs(root, res, valuelist)
return res
参考:
http://bookshadow.com/weblog/2015/08/16/leetcode-binary-tree-paths/
自己重写code
就是这个模板
class Solution(object):
def dfs(self, root, valuelist, res):
if root.left == None and root.right == None:
res.append(valuelist+str(root.val))
else:
if root.left:
self.dfs(root.left, valuelist + str(root.val) + '->', res)
if root.right:
self.dfs(root.right, valuelist + str(root.val) + '->', res)
def binaryTreePaths(self, root):
"""
:type root: TreeNode
:rtype: List[str]
"""
if not root: return []
res = []
self.dfs(root, '', res)
return res