返回
在蜿蜒的二叉树中,捕捉左叶之魂,探寻隐藏的财富
前端
2024-02-20 12:11:16
递归
递归是一种解决问题的经典方法。它通过将问题分解成更小的子问题,然后递归地解决这些子问题来工作。在二叉树中,我们可以使用递归来计算左叶子的和。
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
总结
在本文中,我们介绍了三种计算二叉树中所有左叶子的和的方法:递归、深度优先搜索和广度优先搜索。这三种方法各有优缺点,在不同的场景下可以发挥各自的优势。