📌  相关文章
📜  给定一棵二叉树,打印所有从根到叶的路径(1)

📅  最后修改于: 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]
总结

以上就是求二叉树从根到叶子节点的所有路径的完整代码实现。通过深度优先搜索,我们可以方便地求得所有的路径。在实际面试中,掌握这个算法有助于我们更好地应对树相关的面试题。