首页 > 代码库 > Leetcode 257. Binary Tree Paths
Leetcode 257. Binary Tree Paths
Given a binary tree, return all root-to-leaf paths.
For example, given the following binary tree:
1 / 2 3 5
All root-to-leaf paths are:
["1->2->5", "1->3"]
本题可以用DFS或者BFS。
解法一: DFS,参考自九章算法
1 class Solution: 2 # @param {TreeNode} root the root of the binary tree 3 # @return {List[str]} all root-to-leaf paths 4 def binaryTreePaths(self, root): 5 # Write your code here 6 result = [] 7 if root is None: 8 return result 9 self.dfs(root, result, []) 10 return result 11 12 def dfs(self, node, result, tmp): 13 tmp.append(str(node.val)) 14 if node.left is None and node.right is None: 15 result.append(‘->‘.join(tmp)) 16 tmp.pop() 17 return 18 19 if node.left: 20 self.dfs(node.left, result, tmp); 21 22 if node.right: 23 self.dfs(node.right, result, tmp) 24 25 tmp.pop()
这个解法中需要注意的是需要使用两次pop。图例中,pop使用了三次,分别是当出现leaf node时,pop了4和5。然后是当左子树和右子树都完成搜索时,要pop当前的节点(node.val = 2), 然后才能进入3所在的子树。即,需要用L25或者L16将L13中加入path的节点pop出来。
下面这个很类似的解法没有使用pop,原因是在L15和L18中并没有用一个新的定义覆盖原来的tmp。所以当搜索完左子树回到2时,这个点对应的tmp还是[1]。
1 class Solution: 2 # @param {TreeNode} root the root of the binary tree 3 # @return {List[str]} all root-to-leaf paths 4 def binaryTreePaths(self, root): 5 # Write your code here 6 self.result = [] 7 if root is None: 8 return self.result 9 10 def dfs(node, tmp): 11 if node.left is None and node.right is None: 12 self.result.append(‘->‘.join(tmp)) 13 14 if node.left: 15 dfs(node.left, tmp+[str(node.left.val)]); 16 17 if node.right: 18 dfs(node.right, tmp+[str(node.right.val)]) 19 20 dfs(root, [str(root.val)]) 21 return self.result
Leetcode 257. Binary Tree Paths
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。