递归:由上至下递归,需要传递路径这个参数,递归函数无返回
class Solution:
def binaryTreePaths(self, root: TreeNode) -> List[str]:
def allPaths(root, path):
if root:
path += str(root.val)
if not root.left and not root.right:
res.append(path)
else:
path += '->'
allPaths(root.left, path)
allPaths(root.right, path)
path = ''
res = []
allPaths(root, path)
return res
广度优先搜索:
class Solution:
def binaryTreePaths(self, root: TreeNode) -> List[str]:
# 迭代
if not root:
return []
res = []
node_queue = deque([root])
path_queue = deque([str(root.val)])
while node_queue:
cur = node_queue.popleft()
path = path_queue.popleft()
if cur.left:
node_queue.append(cur.left)
pathleft = path + '->' + str(cur.left.val)
path_queue.append(pathleft)
if cur.right:
node_queue.append(cur.right)
pathright = path + '->' + str(cur.right.val)
path_queue.append(pathright)
if not cur.left and not cur.right:
res.append(path)
return res