leetcode257.二叉树的所有路径

148 阅读1分钟

257.二叉树的所有路径

给定一个二叉树,返回所有从根节点到叶子节点的路径。叶子节点:没有子节点的节点。

输入:
   1
 /   \
2     3
 \
  5
输出: ["1->2->5", "1->3"]
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def binaryTreePaths(self, root: TreeNode) -> List[str]:
        def construct_paths(root, path):
            if root:
                path += str(root.val)
                if not root.left and not root.right:  # 当前节点是叶子节点
                    paths.append(path)  # 把路径加入到答案中
                else:
                    path += '->'  # 当前节点不是叶子节点,继续递归遍历
                    construct_paths(root.left, path)
                    construct_paths(root.right, path)

        paths = []
        construct_paths(root, '')
        return paths
"""
递归。在递归遍历二叉树时,需要考虑当前的节点和它的孩子节点。
如果当前的节点不是叶子节点,则在当前的路径末尾添加该节点,并递归遍历该节点的每一个孩子节点。
如果当前的节点是叶子节点,则在当前的路径末尾添加该节点后,就得到了一条路径,把该路径加入答案。
"""