拟人算法系列文章,以容易理解的方式描述算法,点赞收藏不迷路
二叉树的所有路径
class Solution:
def binary_tree_paths(self, root: TreeNode,):
result: list[str] = []
path: list[int] = []
if cur is None:
return result
self.traversal(root, path, result)
return result
def traversal(self, cur: TreeNode, path: list[int], result: list[str]):
path.append(cur.val) # 中
if cur.left is None and cur.right is None:
sPath = '->'.join(map(str, path))
result.append(sPath)
return
if cur.left: # 左
self.traversal(cur.left, path, result)
path.pop()
if cur.right: # 右
self.traversal(cur.right, path, result)
path.pop()
if __name__ == '__main__':
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.left.right = TreeNode(5)
s = Solution()
print(s.binary_tree_paths(root)) # ['1->2->4', '1->2->5', '1->3']
调用部分:准备一个列表path存放一个路径,一个result的列表存放所有路径
递归部分:1)参数cur,path,result,返回值无,2)退出条件,如果当前节点的左右子节点都为空,那么说明一条路径找完了,那么将path存入result,3)单层递归逻辑,好比一个人从一棵树的根节点开始,用先序遍历的方式,整体从上往下,遍历每个节点,如果当前节点左右子节点都为空说明到了一条路径的尽头,于是保存这条路径,只要当前节点的子节点不为空,那么就对子节点递归的执行同样的操作,同时每个递归调用,需要对应的pop,从而回溯