1. 题目:
给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。
叶子节点 是指没有子节点的节点。
示例 1:
输入:root = [1,2,3,null,5]
输出:[“1->2->5”,“1->3”]
示例 2:
输入:root = [1]
输出:[“1”]
2. 我的代码:
# 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]: # 回溯路径 path = [] result = [] # 递归 + 回溯 def traceBack(node): # 终止条件 if node == None: return 0 path.append(str(node.val)) if node.left == None and node.right == None: result.append(path[:]) elif node.left == None: traceBack(node.right) elif node.right == None: traceBack(node.left) else: traceBack(node.left) traceBack(node.right) path.pop() traceBack(root) return ["->".join(i) for i in result]
二叉树求解所有路径,需要记录路径,这就想到了回溯,其实回溯无处不在。回溯和递归是相辅相成的,有递归的地方就可以加回溯。一个path.append()
放在前面,一个path.pop()
放在后面。
递归要分很多情况,如果此节点是叶子节点,则把路径的副本传入结果列表中;如果左节点是空,则去递归右节点;如果右节点是空,则去递归左节点;如果左右节点都不为空,则按后序遍历顺序遍历。
最后用["->".join(i) for i in result]
将结果列表中的列表元素变为字符串形式