首页 > 代码库 > 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