📅  最后修改于: 2023-12-03 14:58:35.958000             🧑  作者: Mango
本题是一道初步考察程序员对于二叉树的理解和实现的题目。
给定一棵二叉树,找到所有从根节点到叶子节点的路径,输出这些路径上所有节点的值。
示例:
输入:
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 上。