当前位置: 首页 > article >正文

【代码随想录】刷题记录(49)-完全二叉树的节点个数

题目描述:

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

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

 

示例 1:

 

079ef7a0e23613599404ff6e5801473e.jpeg

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

示例 2:

输入:root = []
输出:0

示例 3:

输入:root = [1]
输出:1

 

提示:

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

 

我的作答:

因为题目特别强调是完全二叉树,所以根据完全二叉树的特性来说,不满的肯定是右结点,而除了最下一层是不满的以外,其余的层肯定相等;所以只需要对最下面一层进行处理;

# 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: Optional[TreeNode]
        :rtype: int
        """
        def getNum(node):
            if not node:
                return 0
            left = node.left
            right = node.right
            leftdepth, rightdepth = 0, 0
            while left:
                left = left.left
                leftdepth += 1
            while right:
                right = right.right
                rightdepth += 1
            if leftdepth==rightdepth: #判断子树是否满二叉树
                return 2**(leftdepth+1)-1 #深度从0开始所以要加一
            leftnum = getNum(node.left) #递归直到左结点为空
            rightnum = getNum(node.right) #递归直到右结点空
            return leftnum+rightnum+1 #加一是本身的这个结点
        return getNum(root)

56d8fc2bddab40549591410805c0fecb.png

 

参考代码:

(1)迭代法

import collections
class Solution:
    def countNodes(self, root: TreeNode) -> int:
        queue = collections.deque()
        if root:
            queue.append(root)
        result = 0
        while queue:
            size = len(queue)
            for i in range(size):
                node = queue.popleft()
                result += 1 #记录节点数量
                if node.left:
                    queue.append(node.left)
                if node.right:
                    queue.append(node.right)
        return result

(2)精简递归写法(看看得了.jpg)

class Solution:
    def countNodes(self, root: TreeNode) -> int:
        if not root:
            return 0
        return 1 + self.countNodes(root.left) + self.countNodes(root.right)

 

 


http://www.kler.cn/a/415945.html

相关文章:

  • Android 图形系统之三:SurfaceControl
  • RuoYi排序
  • 批量生成不同用户的pdf 文件(html样式)
  • 解决 java -jar 报错:xxx.jar 中没有主清单属性
  • ASP.NET Core项目中使用SqlSugar连接多个数据库的方式
  • STL基本算法之copy与copy_backward
  • TikTok、YouTube、Meta全面上线小游戏板块,2024年游戏出海流量和变现新趋势
  • 【halcon】Metrology工具系列之 set_metrology_object_param
  • QGIS生成的XYZ切片的后台服务实现和前端调用
  • 性能测试之压测如何做
  • 获取轮廓末端点
  • 快速理解微服务中Gateway的概念
  • 实现对图片或者视频增加隐藏水印和提取水印
  • Linux下的wlan0控制
  • 将服务器上的服务映射到本地使用
  • MarkDown-插入图片-图片url地址的生成获取方法
  • 分布式协同 - 分布式锁一二事儿
  • 【深度学习】各种卷积—卷积、反卷积、空洞卷积、可分离卷积、分组卷积
  • 从简单的自动化脚本到复杂的智能助手:Agent技术的实践与应用
  • 【分布式】分布式事务
  • 浅谈telnet和ping
  • ChatGPT 网络安全秘籍(三)
  • python pycharm与cmd中制表符不一样
  • 时间相关转换
  • 低空经济“蓄势腾飞”,数字样机保驾护航
  • 我们来学mysql -- 事务之概念(原理篇)