6.8完全二叉树的节点个数(LC222-E)

算法:

如果不考虑完全二叉树的特性,直接把完全二叉树当作普通二叉树求节点数,其实也很简单。

递归法:

用什么顺序遍历都可以。

比如后序遍历(LRV):不断遍历左右子树的节点数,最后加上根节点的节点数1

迭代法:

用层序遍历,改一下模版代码就行。

正确代码:

递归法:

复制代码
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def countNodes(self, root: Optional[TreeNode]) -> int:
        if root == None:
            return 0
        #左
        leftnum = self.countNodes(root.left)

        #右
        rightnum = self.countNodes(root.right)

        #中
        num = 1 + leftnum + rightnum

        return num

时间空间复杂度:

时间复杂度分析:

在最坏情况下,需要遍历二叉树的所有节点才能计算节点的数量。因此,时间复杂度为O(n),其中n是二叉树中的节点数。

空间复杂度分析:

递**归调用的空间复杂度取决于递归的深度,即树的高度。**在最坏情况下,二叉树是一个链表结构,高度为n。因此,递归调用的空间复杂度为O(n) - 此外,除了递归调用的空间,没有使用额外的数据结构。因此,除了递归调用的空间外,空间复杂度为O(1)。

综上所述,时间复杂度为O(n),空间复杂度为O(n)(由于递归调用的空间)或O(1)(除了递归调用的空间)。

相关推荐
山顶风景独好2 小时前
【Leetcode】随笔
数据结构·算法·leetcode
科大饭桶3 小时前
C++入门自学Day11-- String, Vector, List 复习
c语言·开发语言·数据结构·c++·容器
Cx330❀5 小时前
【数据结构初阶】--排序(四):归并排序
c语言·开发语言·数据结构·算法·排序算法
艾莉丝努力练剑6 小时前
【C语言16天强化训练】从基础入门到进阶:Day 1
c语言·开发语言·数据结构·学习
番薯大佬6 小时前
编程算法实例-冒泡排序
数据结构·算法·排序算法
ankleless7 小时前
数据结构(03)——线性表(顺序存储和链式存储)
数据结构·考研·链表·顺序表·线性表
KarrySmile7 小时前
Day8--滑动窗口与双指针--1004. 最大连续1的个数 III,1658. 将 x 减到 0 的最小操作数,3641. 最长半重复子数组
数据结构·算法·双指针·滑动窗口·不定长滑动窗口·最大连续1的个数·最长子数组
大阳12319 小时前
线程(基本概念和相关命令)
开发语言·数据结构·经验分享·算法·线程·学习经验
FPGA21 小时前
探讨4B/5B编码、8B/10B编码区别以及FPGA实现
数据结构
秋难降21 小时前
线段树的深度解析(最长递增子序列类解题步骤)
数据结构·python·算法