踏遍千山万水,追寻二叉树中的宝藏路径
2024-02-16 21:30:06
浩瀚的二叉树中,潜藏着无数条路径,犹如浩瀚星河中的璀璨星轨,勾勒出瑰丽夺目的景象。每条路径都诉说着一段独特的故事,承载着特定的数字之和。
踏上寻宝之旅
你的目标是找出从二叉树的根节点出发,沿着枝叶一路蜿蜒至叶节点,使沿途节点值之和恰好等于指定数字的所有路径。这是一个激动人心的寻宝之旅,等待着你细心探索和发现。
回溯的艺术
要完成寻宝任务,你需要掌握回溯的艺术。回溯是一种重要的算法技巧,它能帮助你遍历所有可能的路径,并从中找出符合条件的路径。在这个寻宝之旅中,回溯将成为你不可或缺的工具,伴随你一步步接近宝藏。
代码指引
def path_sum(root, target):
if not root:
return []
result = []
stack = [(root, [root.val])]
while stack:
node, path = stack.pop()
if not node.left and not node.right and sum(path) == target:
result.append(path)
continue
if node.left:
stack.append((node.left, path + [node.left.val]))
if node.right:
stack.append((node.right, path + [node.right.val]))
return result
代码解析
这段Python代码完美地诠释了回溯的艺术。它从二叉树的根节点开始,沿着枝叶不断回溯,寻找符合条件的路径。
-
函数定义: path_sum(root, target),其中root是二叉树的根节点,target是目标数字。
-
空检查: 首先检查root是否为空,如果为空,则直接返回一个空列表,因为没有节点可供遍历。
-
初始化: 创建一个result列表来存储符合条件的路径,并创建一个stack列表来存储当前路径。
-
回溯遍历:
-
将根节点和一条包含根节点值的路径放入stack中。
-
只要stack不为空,就不断进行循环。
-
弹出stack顶部的元素,即当前节点和路径。
-
判断当前节点是否为叶节点(左右子节点都为空),且路径之和是否等于目标数字,如果是,则将路径添加到result列表中。
-
如果当前节点有左子节点,则将左子节点和一条包含左子节点值的路径放入stack中。
-
如果当前节点有右子节点,则将右子节点和一条包含右子节点值的路径放入stack中。
-
-
返回结果: 返回result列表,其中包含所有符合条件的路径。
总结
踏遍千山万水,追寻二叉树中的宝藏路径,是一段激动人心的旅程。借助回溯的艺术和精妙的算法,你将一步步接近宝藏,挖掘出隐藏在二叉树中的秘密。