📌  相关文章
📜  查找给定完美二叉树的所有节点的总和(1)

📅  最后修改于: 2023-12-03 14:55:35.841000             🧑  作者: Mango

查找给定完美二叉树的所有节点的总和

在完美二叉树中,所有非叶子节点都有两个子节点,并且所有叶子节点都在同一层级上。假设我们有一个完美二叉树,如下图所示:

      1
     / \
    2   3
   / \ / \
  4  5 6  7

节点1是根节点,它有两个子节点2和3。子节点2和3也各自有两个子节点。节点4、5、6和7是叶子节点。

我们的任务是查找这个完美二叉树的所有节点的总和。这个问题可以通过深度优先搜索(DFS)来解决。

算法步骤
  1. 如果树为空,返回0。
  2. 否则,将根节点的值加到结果中。
  3. 递归地计算左子树的所有节点的总和,并将其加到结果中。
  4. 递归地计算右子树的所有节点的总和,并将其加到结果中。
  5. 返回结果。
代码实现

下面是用Python编写的查找给定完美二叉树的所有节点的总和的代码:

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

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

    return root.val + sumTreeNode(root.left) + sumTreeNode(root.right)
复杂度分析
  • 时间复杂度:O(n),其中n是树中的节点数。在最坏情况下,我们需要遍历树中的所有节点。
  • 空间复杂度:O(h),其中h是树的高度。这里需要考虑函数调用栈的空间。最坏情况下,树呈现链式结构,例如一个斜树,此时空间复杂度为O(n)。在最好情况下,树是完全平衡的,此时空间复杂度为O(log n)。