📜  门|门 IT 2006 |第 60 题(1)

📅  最后修改于: 2023-12-03 14:58:35.958000             🧑  作者: Mango

门|门 IT 2006 第60题 题解

本题是一道初步考察程序员对于二叉树的理解和实现的题目。

题目描述

给定一棵二叉树,找到所有从根节点到叶子节点的路径,输出这些路径上所有节点的值。

示例:

输入:
   1
 /   \
2     3
 \
  5


输出:
["1->2->5", "1->3"]
解题思路

我们可以通过递归的方式去遍历整棵二叉树,如果当前节点是叶子节点,那么我们就添加这条路径到结果列表。

对于每一个非叶子节点,我们递归遍历其左右子树,并且在递归过程中记录下经过的所有节点的值。最后将这些值以 -> 分隔符连接起来,作为这条路径的字符串形式,加入结果列表。

代码实现
class Solution:
    def binaryTreePaths(self, root: TreeNode) -> List[str]:
        def dfs(node: TreeNode, path: str, res: List[str]):
            if not node:
                return

            # 叶子节点,添加到答案
            if not node.left and not node.right:
                res.append(path + str(node.val))

            # 非叶子节点,递归遍历子树
            if node.left:
                dfs(node.left, path + str(node.val) + "->", res)
            if node.right:
                dfs(node.right, path + str(node.val) + "->", res)

        res = []
        dfs(root, "", res)
        return res
总结

通过本题的练习,我们了解了如何递归地遍历一棵二叉树,并且在递归过程中记录下经过的所有节点的值,从而求出所有从根节点到叶子节点的路径。

同时,我们还提升了对于字符串拼接和列表操作的熟练度。

完整可运行的代码在 我的GitHub 上。