想法:
利用深度优先搜索算法。建立一个helper function,这个function的输入为:一个节点,一条路径和一个代表结果result的list。
在这个helper function里,我们先检查这个节点是否有左子树和右子树,如果没有,证明已经到达leaf。我们把这条路径加到result里面。
接着,考虑有左子树的情况。call我们建立好的helper function,输入左子树的节点,并将现有的path加上这个节点包含的值。
然后,考虑有右子树的情况。call我们建立好的helper function,输入右子树的节点,并将现有的path加上这个节点包含的值。
最后返回result。
代码:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def binaryTreePaths(self, root: Optional[TreeNode]) -> List[str]:
def tree_paths(node, path, res):
if not node.left and not node.right:
res.append(path)
if node.left:
tree_paths(node.left, path + f"->{node.left.val}", res)
if node.right:
tree_paths(node.right, path + f"->{node.right.val}", res)
return res
return tree_paths(root, f"{root.val}", [])