[LeetCode] 257. Binary Tree Paths_ Easy tag: DFS
2018-07-13 23:42 Johnson_强生仔仔 阅读(268) 评论(0) 编辑 收藏 举报Given a binary tree, return all root-to-leaf paths.
Note: A leaf is a node with no children.
Example:
Input: 1 / \ 2 3 \ 5 Output: ["1->2->5", "1->3"] Explanation: All root-to-leaf paths are: 1->2->5, 1->3
思路为DFS, 只是append进入stack的时候一并append进入当前的path即可.
1. Constraints
1) can be empty
2. Ideas
DFS T: O(n) S: O(n)
1) edge case
2) stack = [(root, str(root.val))]
3) DFS, if leaf, ans.append(path)
4)return ans
3. Codes
3.1) iterable
1 class Solution: 2 def path(self, root): 3 if not root: return [] 4 ans, stack = [], [(root, str(root.val))] 5 while stack 6 node, path = stack.pop() 7 if not node.left and not node.right: 8 ans.append(path) 9 if node.right: 10 stack.append((node.right, path + "->" + node.right.val)) 11 if node.left: 12 stack.append((node.left, path + "->" + node.left.val)) 13 return ans
3.2) Recursive
1 class Solution: 2 def path(self, root): 3 def helper(root, path, ans): 4 path += str(root.val) 5 if not root.left and not root.right: 6 ans.append(path) 7 if root.left: 8 stack.append((root.left, path + "->", ans)) 9 if root.right: 10 stack.append((root.right, path + "->", ans)) 11 if not root: return [] 12 ans = [] 13 helper(root, "", ans) 14 return ans
4.. Test cases
1) empty
2) 1
3)
1 / \ 2 3 \ 5