Leetcode 257. Binary Tree Paths
Posted lettuan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 257. Binary Tree Paths
Java [Leetcode 257]Binary Tree Paths
leetcode?python 257. Binary Tree Paths
leetcode 257. Binary Tree Paths