222. 完全二叉树的节点个数

222. 完全二叉树的节点个数

题目-中等难度

中等

1K

相关企业

给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。

完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。

示例

示例 1:

输入:root = [1,2,3,4,5,6]

输出:6

示例 2:

输入:root = []

输出:0

示例 3:

输入:root = [1]

输出:1

提示:

  • 树中节点的数目范围是[0, 5 * 104]
  • 0 <= Node.val <= 5 * 104
  • 题目数据保证输入的树是 完全二叉树

进阶:

遍历树来统计节点是一种时间复杂度为 O(n) 的简单解决方案。你可以设计一个更快的算法吗?

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/summary-ranges
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

1. BFS

时间

60ms

击败 71.14%使用 Python 的用户

内存

27.93MB

击败 7.91%使用 Python 的用户

python 复制代码
# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):
    def countNodes(self, root):
        """
        :type root: TreeNode
        :rtype: int
        """
        li = [root]
        res = 0
        while li:
            for _ in range(len(li)):
                a = li.pop()
                if a:
                    res += 1
                if a and a.left:
                    li.append(a.left)
                if a and a.right:
                    li.append(a.right)

        return res

2. dfs

时间

56ms

击败 84.74%使用 Python 的用户

内存

27.58MB

击败 79.96%使用 Python 的用户

python 复制代码
# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):
    def countNodes(self, root):
        """
        :type root: TreeNode
        :rtype: int
        """
        # 迭代
        def dfs(node):
        	# 如果节点不存在, 返回0
            if not node:
                return 0
            # 迭代统计左节点
            left = dfs(node.left)
            right = dfs(node.right)
            # 统计个数, 当前节点下左右节点各有多少节点+当前节点
            return left+right+1
        return dfs(root)
相关推荐
一晌小贪欢1 小时前
Python 爬虫进阶:如何利用反射机制破解常见反爬策略
开发语言·爬虫·python·python爬虫·数据爬虫·爬虫python
躺平大鹅1 小时前
5个实用Python小脚本,新手也能轻松实现(附完整代码)
python
yukai080081 小时前
【最后203篇系列】039 JWT使用
python
晚霞的不甘1 小时前
Flutter for OpenHarmony 可视化教学:A* 寻路算法的交互式演示
人工智能·算法·flutter·架构·开源·音视频
望舒5131 小时前
代码随想录day25,回溯算法part4
java·数据结构·算法·leetcode
独好紫罗兰2 小时前
对python的再认识-基于数据结构进行-a006-元组-拓展
开发语言·数据结构·python
Dfreedom.2 小时前
图像直方图完全解析:从原理到实战应用
图像处理·python·opencv·直方图·直方图均衡化
C++ 老炮儿的技术栈2 小时前
Qt 编写 TcpClient 程序 详细步骤
c语言·开发语言·数据库·c++·qt·算法
KYGALYX2 小时前
逻辑回归详解
算法·机器学习·逻辑回归
铉铉这波能秀2 小时前
LeetCode Hot100数据结构背景知识之集合(Set)Python2026新版
数据结构·python·算法·leetcode·哈希算法