返回

踏遍千山万水,追寻二叉树中的宝藏路径

前端

浩瀚的二叉树中,潜藏着无数条路径,犹如浩瀚星河中的璀璨星轨,勾勒出瑰丽夺目的景象。每条路径都诉说着一段独特的故事,承载着特定的数字之和。

踏上寻宝之旅

你的目标是找出从二叉树的根节点出发,沿着枝叶一路蜿蜒至叶节点,使沿途节点值之和恰好等于指定数字的所有路径。这是一个激动人心的寻宝之旅,等待着你细心探索和发现。

回溯的艺术

要完成寻宝任务,你需要掌握回溯的艺术。回溯是一种重要的算法技巧,它能帮助你遍历所有可能的路径,并从中找出符合条件的路径。在这个寻宝之旅中,回溯将成为你不可或缺的工具,伴随你一步步接近宝藏。

代码指引

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代码完美地诠释了回溯的艺术。它从二叉树的根节点开始,沿着枝叶不断回溯,寻找符合条件的路径。

  1. 函数定义: path_sum(root, target),其中root是二叉树的根节点,target是目标数字。

  2. 空检查: 首先检查root是否为空,如果为空,则直接返回一个空列表,因为没有节点可供遍历。

  3. 初始化: 创建一个result列表来存储符合条件的路径,并创建一个stack列表来存储当前路径。

  4. 回溯遍历:

    • 将根节点和一条包含根节点值的路径放入stack中。

    • 只要stack不为空,就不断进行循环。

    • 弹出stack顶部的元素,即当前节点和路径。

    • 判断当前节点是否为叶节点(左右子节点都为空),且路径之和是否等于目标数字,如果是,则将路径添加到result列表中。

    • 如果当前节点有左子节点,则将左子节点和一条包含左子节点值的路径放入stack中。

    • 如果当前节点有右子节点,则将右子节点和一条包含右子节点值的路径放入stack中。

  5. 返回结果: 返回result列表,其中包含所有符合条件的路径。

总结

踏遍千山万水,追寻二叉树中的宝藏路径,是一段激动人心的旅程。借助回溯的艺术和精妙的算法,你将一步步接近宝藏,挖掘出隐藏在二叉树中的秘密。