返回

在蜿蜒的二叉树中,捕捉左叶之魂,探寻隐藏的财富

前端

递归

递归是一种解决问题的经典方法。它通过将问题分解成更小的子问题,然后递归地解决这些子问题来工作。在二叉树中,我们可以使用递归来计算左叶子的和。

def sum_of_left_leaves(root):
  if not root:
    return 0

  # 如果左子树不为空,并且左子树是左叶子,则将左子树的和添加到结果中
  if root.left and not root.left.left and not root.left.right:
    result += root.left.val

  # 递归地计算左子树和右子树的和
  result += sum_of_left_leaves(root.left)
  result += sum_of_left_leaves(root.right)

  return result

深度优先搜索

深度优先搜索(DFS)是一种遍历二叉树的算法。它从根节点开始,然后递归地访问每个子节点。当它到达一个叶节点时,它会将该叶节点的和添加到结果中。

def sum_of_left_leaves(root):
  stack = [root]
  result = 0

  while stack:
    node = stack.pop()

    # 如果左子树不为空,并且左子树是左叶子,则将左子树的和添加到结果中
    if node.left and not node.left.left and not node.left.right:
      result += node.left.val

    # 如果左子树不为空,则将其压入栈中
    if node.left:
      stack.append(node.left)

    # 如果右子树不为空,则将其压入栈中
    if node.right:
      stack.append(node.right)

  return result

广度优先搜索

广度优先搜索(BFS)是一种遍历二叉树的算法。它从根节点开始,然后按层访问每个节点。当它到达一个叶节点时,它会将该叶节点的和添加到结果中。

def sum_of_left_leaves(root):
  queue = [root]
  result = 0

  while queue:
    node = queue.pop(0)

    # 如果左子树不为空,并且左子树是左叶子,则将左子树的和添加到结果中
    if node.left and not node.left.left and not node.left.right:
      result += node.left.val

    # 如果左子树不为空,则将其加入队列
    if node.left:
      queue.append(node.left)

    # 如果右子树不为空,则将其加入队列
    if node.right:
      queue.append(node.right)

  return result

总结

在本文中,我们介绍了三种计算二叉树中所有左叶子的和的方法:递归、深度优先搜索和广度优先搜索。这三种方法各有优缺点,在不同的场景下可以发挥各自的优势。