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)
相关推荐
金銀銅鐵10 分钟前
[Python] 借助 Pillow 和 NumPy 生成与斐波那契数列有关的图案
python·数学
雪之下雪乃的代码日记16 分钟前
Python快速入门(Java开发者版)
java·开发语言·笔记·python
gb421528739 分钟前
python中pypdf库和langchain-unstructured库在解析pdf文件的时候的区别?
python·langchain·pdf
weixin1997010801644 分钟前
☁️《抖店API基础¥0.018/百次·增值¥0.05/百次:云内云外价差架构实战》(附Python源码)
开发语言·python·架构
0566461 小时前
Python数据结构——循环队列
python·学习
萌动的小火苗1 小时前
1、python基础面试题
java·开发语言·python
sunywz2 小时前
【从零搭建物联网智能充电桩系统】2、自定义二进制协议:设备为什么不用 JSON?
python·物联网·json
小叮当爱咖啡2 小时前
Day3.参数+Prompt三板斧
开发语言·python·prompt
菜冻鱼2 小时前
Python-pandas-索引与筛选
开发语言·笔记·python·numpy·pandas·学习方法
青 春 记 忆3 小时前
LeetCode 53. 最大子数组和|Python 解法详解
python·算法·leetcode