📌  相关文章
📜  给定二叉树所有层级叶节点的最大和(1)

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

求给定二叉树所有层级叶节点的最大和

在二叉树中,叶节点是指没有任何子节点的节点。现在我们要求给定二叉树所有层级叶节点的最大和。

解题思路

我们可以使用递归的方式来实现这个功能。我们可以定义一个函数,该函数的返回值是给定二叉树中所有层级叶节点的最大和。我们首先需要找到二叉树的所有叶节点,然后计算它们的和并返回。我们可以使用一个队列来辅助遍历二叉树。在遍历二叉树的过程中,我们遇到一个节点时,如果这个节点是叶节点,我们就将其放入队列中。当我们遍历完所有节点后,队列中存储的就是所有叶节点了。此时,我们可以遍历这个队列,并计算所有叶节点的和。最后返回这个和即可。

代码实现

以下是用 Python 语言实现该功能的代码:

from queue import Queue

class TreeNode:
    def __init__(self, value):
        self.value = value
        self.left = None
        self.right = None

def sumOfLeftLeaves(root: TreeNode) -> int:
    if not root:
        return 0

    queue = Queue()
    queue.put(root)
    leavesSum = 0

    while not queue.empty():
        node = queue.get()
        if node.left:
            if not node.left.left and not node.left.right:
                leavesSum += node.left.value
            else:
                queue.put(node.left)
        if node.right:
            if node.right.left or node.right.right:
                queue.put(node.right)

    return leavesSum
总结

该算法的时间复杂度为 $O(n)$,其中 $n$ 是二叉树中节点的个数。我们需要遍历整个二叉树,并使用队列辅助遍历,所以时间复杂度是 $O(n)$。空间复杂度也是 $O(n)$,因为我们需要使用一个队列来存储二叉树中的节点。