📌  相关文章
📜  二叉树所有叶子节点的总和(1)

📅  最后修改于: 2023-12-03 15:21:40.123000             🧑  作者: Mango

二叉树所有叶子节点的总和

二叉树是一种常见的数据结构,它由一个根节点和若干个子节点构成,每个节点最多只有两个子节点。二叉树中的叶子节点是没有子节点的节点,而非叶子节点则至少拥有一个子节点。

在计算二叉树的总和时,我们需要遍历所有的叶子节点,并将它们的值相加。下面介绍两种常用的方法来计算二叉树所有叶子节点的总和。

方法一:递归

我们可以使用递归来遍历二叉树的所有节点。当遇到叶子节点时,将它的值加到总和中。具体实现如下:

def sum_of_leaves(root):
    if not root:
        return 0
    if not root.left and not root.right:
        return root.value
    return sum_of_leaves(root.left) + sum_of_leaves(root.right)

以上代码中,如果节点为空,则返回0;如果节点没有子节点,则返回节点的值;否则递归遍历节点的左右子树,并将结果相加。

方法二:广度优先搜索

我们也可以使用广度优先搜索(BFS)来遍历二叉树的所有节点,并在遇到叶子节点时将其值加到总和中。具体实现如下:

def sum_of_leaves(root):
    if not root:
        return 0
    queue = [root]
    sum = 0
    while queue:
        node = queue.pop(0)
        if not node.left and not node.right:
            sum += node.value
        if node.left:
            queue.append(node.left)
        if node.right:
            queue.append(node.right)
    return sum

以上代码中,我们用一个队列来辅助进行BFS,每次取出队列首部的节点node,判断其是否为叶子节点,如果是则将其值加到总和中,否则将其子节点加入队列中,继续进行遍历。

以上两种方法都可以在O(n)的时间复杂度内求得二叉树所有叶子节点的总和。

总结

本文介绍了两种常用的方法来求解二叉树所有叶子节点的总和,分别是递归和广度优先搜索。其中,递归实现简单,但可能会造成栈溢出;而广度优先搜索则需要使用队列,但可以有效防止栈溢出的情况发生。简单的二叉树遍历问题,使用递归或BFS都可以得到较好的效果。