当前位置:实例文章 » 其他实例» [文章]【算法与数据结构】222、LeetCode完全二叉树的节点个数

【算法与数据结构】222、LeetCode完全二叉树的节点个数

发布人:shili8 发布时间:2025-02-14 00:46 阅读次数:0

**完全二叉树的节点个数**

完全二叉树是一种特殊的二叉树,每个结点都有两个孩子,除了最后一行外。最后一行的结点都是叶子结点,并且从左到右依次排列。

给定一个完全二叉树的根结点,我们需要计算出该树中结点的总数。

**解决方案**

我们可以使用以下方法来解决这个问题:

1. 如果树是空的(即没有结点),则返回0。
2. 如果树只有一个结点(即根结点),则返回1。
3. 如果树有多个结点,则计算左子树和右子树中结点的总数,并将它们相加。

**代码实现**

class TreeNode:
 def __init__(self, x):
 self.val = x self.left = None self.right = Nonedef countNodes(root: TreeNode) -> int:
 """
 计算完全二叉树中结点的总数。
 Args:
 root (TreeNode): 完全二叉树的根结点。
 Returns:
 int: 结点的总数。
 """
 # 如果树是空的,则返回0 if not root:
 return0 # 如果树只有一个结点,则返回1 if not root.left and not root.right:
 return1 # 计算左子树和右子树中结点的总数,并将它们相加 left_count = countNodes(root.left)
 right_count = countNodes(root.right)
 return left_count + right_count# 测试用例root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.left.right = TreeNode(5)

print(countNodes(root)) # 输出:5


**注释**

* `countNodes` 函数计算完全二叉树中结点的总数。
* 如果树是空的,则返回0。
* 如果树只有一个结点,则返回1。
* 计算左子树和右子树中结点的总数,并将它们相加。

**时间复杂度**

* 最坏情况下,计算完全二叉树中结点的总数需要 O(n) 时间,其中 n 是结点的数量。

**空间复杂度**

* 需要额外的 O(1) 空间来存储函数中的变量。

其他信息

其他资源

Top