def backtrace(choices,path):
if 满足回溯条件:
res.append(path[:])
return
维护choices
for choice in choices:
path.append(choice) # 处理结点
backtrace(choices,path)
path.pop() # 回溯,撤销处理结果
以257. 二叉树的所有路径为例
def binaryTreePaths(self, root: TreeNode) -> List[str]:
def backtrace(root, path):
path.append(root.val)
# 回溯条件
if not root.right and not root.left:
res.append(path[:])
return
# 维护choices
choices = []
if root.left:
choices.append(root.left)
if root.right:
choices.append(root.right)
# 遍历choices
for choice in choices:
backtrace(choice, path)
path.pop() # 再次回溯到本层时,删掉前一个choice
res = []
backtrace(root, [])
# print(res)
return ["->".join(list(map(str, i))) for i in res]