题目描述:
给定一个二叉树,返回所有从根节点到叶子节点的路径。
说明: 叶子节点是指没有子节点的节点。
要点:
方法1——显式回溯
class Solution:
def binaryTreePaths(self, root: TreeNode) -> List[str]:
if root is None: return []
result = []
subset = [str(root.val)]
def DFS(root, subset, result):
if root.left is None and root.right is None:
result.append(''.join(subset))
return
if root.left is not None:
subset.append('->' + str(root.left.val))
DFS(root.left, subset, result)
subset.pop()
if root.right is not None:
subset.append('->' + str(root.right.val))
DFS(root.right, subset, result)
subset.pop()
DFS(root, subset, result)
return result
方法2——隐式回溯
递归本身带有回溯特性,可以加以利用
class Solution:
def binaryTreePaths(self, root: TreeNode) -> List[str]:
def DFS(root, subset):
if root:
subset += str(root.val)
if not root.left and not root.right:
result.append(subset)
# 可以直接append,不需要像方法一那样用join
else:
subset += '->'
DFS(root.left, subset)
DFS(root.right, subset)
result = []
DFS(root, '')
return result