📅  最后修改于: 2023-12-03 14:56:52.961000             🧑  作者: Mango
给定一棵二叉树,求从根节点到每个叶子节点的路径。我们可以使用深度优先搜索(DFS)来遍历二叉树,并将遍历过程中的路径保存下来。
下面给出具体实现步骤:
定义一个节点类,包括节点值和左右子节点。
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
深度优先搜索可以通过递归的方式实现。我们从根节点开始进行深度优先搜索,每遍历到一个节点,就将该节点的值加入到路径中,并继续遍历该节点的左右子节点,直到遍历到叶子节点。
def dfs(node, path, paths):
if not node.left and not node.right: # 当前节点是叶子节点
paths.append(path + [node.val]) # 保存路径
if node.left:
dfs(node.left, path + [node.val], paths) # 搜索左子树
if node.right:
dfs(node.right, path + [node.val], paths) # 搜索右子树
def binaryTreePaths(root: TreeNode) -> List[str]:
if not root:
return []
paths = []
dfs(root, [], paths)
return ["->".join(map(str, path)) for path in paths]
上述代码中,参数 root
是根节点,paths
是一个列表,用于保存所有路径。函数 dfs()
对每个节点进行深度优先搜索,参数 path
是当前路径上已经遍历过的节点的值。
当搜索到叶子节点时,将路径保存到 paths
列表中。最后,将 paths
中的每个路径转化为字符串,并返回该列表即可。
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def dfs(node, path, paths):
if not node.left and not node.right: # 当前节点是叶子节点
paths.append(path + [node.val]) # 保存路径
if node.left:
dfs(node.left, path + [node.val], paths) # 搜索左子树
if node.right:
dfs(node.right, path + [node.val], paths) # 搜索右子树
def binaryTreePaths(root: TreeNode) -> List[str]:
if not root:
return []
paths = []
dfs(root, [], paths)
return ["->".join(map(str, path)) for path in paths]
以上就是求二叉树从根到叶子节点的所有路径的完整代码实现。通过深度优先搜索,我们可以方便地求得所有的路径。在实际面试中,掌握这个算法有助于我们更好地应对树相关的面试题。