1. 目前而言,我还是更喜欢官方解法二,使用迭代来写的话,更好理解一些
class Solution:
def binaryTreePaths(self, root: TreeNode) -> List[str]:
if not root:
return []
res = []
# 同时保存节点和节点的值(节点经过的路径)
stack = [(root, str(root.val))]
while stack:
node, path = stack.pop()
# 如果已经到了某个叶子节点,那就把当前这条路径加入到总的路径中。
if not node.left and not node.right:
res.append(path)
if node.left:
stack.append((node.left, path + "->" + str(node.left.val)))
if node.right:
stack.append((node.right, path + "->" + str(node.right.val)))
return res
2. 递归。评论区有一种写法很简洁,但是最后 return 的条件是什么呢?
class Solution:
def binaryTreePaths(self, root: TreeNode) -> List[str]:
if not root:
return []
if not root.left and not root.right:
return [str(root.val)]
paths = []
if root.left:
for i in self.binaryTreePaths(root.left):
paths.append(str(root.val) + '->' + i)
if root.right:
for i in self.binaryTreePaths(root.right):
paths.append(str(root.val) + '->' + i)
return paths
网友评论