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