【LeetCode222】完全二叉树的节点个数

Leetcode 222:完全二叉树的节点个数(最详细的解法!!!) 给出一个完全二叉树,求出该树的节点个数。 说明: 完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。 示例: 输入: 1 / \ 2 3 / \ / 4 5 6 输出: 6 解题思路 这个问题使用递归很好... 阅读详情

题目描述

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

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

思路与算法

  1. base cases:
    • 空树:节点的数量是 0
    • 完美二叉树:2^d−1
  2. 递归步骤
    • 递归计算左子树中的节点数
    • 递归计算右子树中的节点数
    • 为当前根节点加 1
  3. 结果组合
    在这里插入图片描述

代码

# 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 not root:
            return 0

        left_depth = self.getLeftDepth(root)
        right_depth = self.getRightDepth(root)
        if left_depth == right_depth:
            return (1 << left_depth) - 1 # same as 2^left_depth - 1

        return 1 + self.countNodes(root.left) + self.countNodes(root.right)

    def getLeftDepth(self, node: TreeNode) -> int:
        depth = 0
        while node:
            depth += 1
            node = node.left
        return depth
    
    def getRightDepth(self, node: TreeNode) -> int:
        depth = 0
        while node:
            depth += 1
            node = node.right
        return depth
        

总结

博客系统 - 系统简介与首页设计 用Bootstrap实现手机端的博客导航栏效果。 阅读详情

相关推荐

NLP自然语言处理:神经网络语言模型(NNLM)

目录 一、传统语言模型 1.1 稀疏性 1.2泛化能力差 二、神经网络语言模型 2.1 前馈神经网络模型(FFLM) 2.2 循环神经网络模型(RNNLM) 2.2.1循环神经网络模型示例 2.2.2RNN语言模型训练过程 2.2.3RNN语言模型反向传播 2.2.4语言模型评估 语言模型的构建目的是为了对语言中的各要素的分布进行估计,具有较长的研究历史和广泛...

陈宸的博客 1万+

【简单】力扣算法题解析LeetCode222:完全二叉树的节点个数

题目要求计算完全二叉树的节点个数。利用完全二叉树的性质,若左右子树高度相等则为满二叉树,直接通过公式 2^h - 1 计算节点数;否则递归求解左右子树。时间复杂度优化至 O((log n)^2)。Java代码通过高度比较和递归实现高效计算。

ylumwd的博客 1104

硬件工程师入门进阶,一文搞懂,看这篇就对了

每家公司的datasheet都有严格的规范,及独特的风格,有时候还会穿插一些原理性的介绍,比如ADI公司的一些ADC/DAC器件资料里面,还会包含AD/DA转换的原理性讲解内容,Datasheet既可以是我们设计上的好帮手,也是学习的好资料。在出货量大的产品中,尽量减少物料种类,比如开头说的,1%的电阻不得不用,那么5%的替换成1%的,物料种类就减少一种,量就大了,能不能争取更优的价格呢?如果说前面学的是内功,那这一关,是招式、是工具的使用,原理图和PCB设计都有对应的工具,教程也很多,且比较容易上手。

一路带飞的博客 5万+

222. 完全二叉树的节点个数【 力扣(LeetCode) 】

完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。进阶:遍历树来统计节点是一种时间复杂度为 O(n) 的简单解决方案。你可以设计一个更快的算法吗?给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。【计算树高其实可以用循环解决,这样空间复杂度就只剩。

yyh520025的博客 1334

自动驾驶——最优控制算法(LQR)工程化总结

到近段时间,真正在我们的控制器上运行最优控制算法(LQR),一步一个脚印,从开始只是知道其“控制理论”的阶段、再到对着一堆网上的资料和公式一筹莫展不知何着手、再到初步实现了LQR算法的开发(但是使用的扭矩环控制,控制的不好,而且由于各种原因被delay,迟迟无法落地),直到大上个星期,泊车平台有此LQR开发需求,又重新了开始了算法的研发,用时一个周时间完成了算法开发,然后再用一个周时间进行实车最优控制算法验证与调试,取得了很大的进展,由于执行器是转角控制的,这无疑少了很多的工作量。

qq_40464599的博客 2787

深入探究贝叶斯网络(Bayesian Network):从基础原理到实际应用

贝叶斯网络,也称为信念网络或有向无环图模型,是一种概率图模型。它使用有向无环图(DAG)来表示随机变量之间的条件依赖关系。每个节点代表一个随机变量,边表示变量之间的条件依赖关系。贝叶斯网络作为一种强大的工具,通过结合概率论和图论,为复杂系统建模和推理提供了有效手段。无论是在医学诊断、故障检测还是自然语言处理等领域,它都展示了巨大的潜力。然而,其计算复杂度高、结构学习困难等挑战也需要我们在实际应用中不断优化算法和技术。希望通过本文,你能对贝叶斯网络有更深入的理解,并能够在实际项目中灵活应用这一强大工具。

qq_28791753的博客 5966

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

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

2301_80211119的博客 726

CQE和SQE 以及 PQA和DQA的区别

‌:PQA聚焦产品全生命周期流程管理,DQA专注于设计阶段的质量控制。

a1809032425的博客 1901

LeetCode第222题_完全二叉树的节点个数

LeetCode 第222题要求计算完全二叉树的节点个数。完全二叉树的特性是除了最底层,其他层节点数达到最大值,且最底层节点集中在左侧。题目提供了三种解法: 递归遍历:适用于任何二叉树,时间复杂度为O(n),空间复杂度为O(log n)。 二分查找 + 位运算:利用完全二叉树的特性,通过比较左右子树高度,递归计算节点数,时间复杂度为O(log² n),空间复杂度为O(log n)。 二分搜索最后一层:通过二分搜索确定最后一层节点数,时间复杂度为O(log² n),空间复杂度为O(1)。 代码实现包括C#和

qq_40263592的博客 1069

一文吃透!C#上位机CAN总线通信开发:从协议解析到数据可视化

CAN底层协议仅定义了8字节数据的传输规则,实际业务需自定义应用层协议,实现多类型数据的有序传输,这是数据解析的核心。仲裁ID(16进制)数据长度(DLC)数据场格式业务含义解析规则0x0014字节0~3:温度数据温度采集(单位:℃)4字节→float类型(大端/小端需统一,如西门子PLC格式)0x0022字节0~1:转速数据电机转速(单位:r/min)2字节→short类型(Int16)0x0031字节0:bit0~bit7设备状态(8路开关量)

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 843

【Bluetooth蓝牙开发】十一、一文秒懂 | 超详细的Bluez交叉编译

1、开篇词 2、蓝牙开发入门 3、蓝牙协议栈总览 4、蓝牙协议栈——物理层 5、蓝牙协议栈——链路层 6、蓝牙协议栈——传输层 7、蓝牙协议栈——L2CAP协议 8、蓝牙协议栈——ATT协议 9、蓝牙协议栈——GATT协议 10、蓝牙通信流程分析 11、蓝牙协议栈——Bluez交叉编译 12、蓝牙调试工具汇总

Donge's Blog 3975

leetcode222 完全二叉树的节点个数

在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。对于情况二,分别递归左孩子,和右孩子,递归到某一深度一定会有左孩子或者右孩子为满二叉树,然后依然可以按照情况1来计算。可以看出如果整个树不是满二叉树,就递归其左右孩子,直到遇到满二叉树为止,用公式计算这个子树(满二叉树)的节点数量。

dokii1的博客 504

别再只会复制Haar级联代码了!OpenCV人脸检测全方案深度解析,从原理到工业级落地

通用预训练模型在你的业务场景效果不好时,用自己的业务数据集训练专属的级联器,是提升精度的终极方案,OpenCV自带和工具,支持自定义Haar/LBP级联器训练。场景首选方案次选方案新手入门学习Haar级联分类器LBP级联分类器嵌入式轻量固定场景LBP级联分类器YuNet轻量版工业级落地项目(99%场景)DNN+YuNetMTCNN多人脸+小目标复杂场景DNN+YuNet自定义微调模型同时做人脸+其他目标检测。

2601_94871597的博客 379

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

摘要:本文提供了两种计算完全二叉树节点数的方法:非递归和递归实现。核心思想是利用完全二叉树的性质,通过比较左右子树高度来快速计算节点数。非递归方法通过迭代遍历,每次计算左右子树高度差,若高度相同则左子树为满二叉树,直接计算其节点数;否则右子树为满二叉树。递归方法采用相同逻辑,但通过函数递归实现。两种方法均利用位运算高效计算2^h,时间复杂度为O(log²n),优于常规遍历的O(n)方法。辅助函数depth()通过仅遍历左子树计算高度,充分利用完全二叉树特性。

2401_82472941的博客 590

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

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

题目来源 222. 完全二叉树的节点个数 题目描述 题目解析 /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { public int countNodes(TreeNode

OceanStar的博客 310

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

222. 完全二叉树的节点个数 - 力扣(LeetCode)

完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。可以看出如果整个树不是满二叉树,就递归其左右孩子,直到遇到满二叉树为止,用公式计算这个子树(满二叉树)的节点数量。在完全二叉树中,如果递归向左遍历的深度等于递归向右遍历的深度,那说明就是满二叉树。输入:root = [1,2,3,4,5,6]

weixin_48613005的博客 604

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

算法:LeetCode222_完全二叉树的节点个数

【代码】算法:LeetCode222_完全二叉树的节点个数。

工匠精神coding,终生学习 437

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

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

Love Peace 166

leetcode222.完全二叉树节点个数

但这没有利用完全二叉树的性质,这里要区分满二叉树和完全二叉树(自己查定义)。从根节点往左走,得到最左深度maxDepthL,同理从根节点往右走,得到最右深度maxDepthR,如果maxDepthL == maxDepthR,那么就是一课满二叉树,直接计算返回,不然继续向下递归,总能得到满二叉树,这样可以不用遍历所有节点。首先最直观的想法,对于一个普通二叉树,我们想知道节点个数,递归得到:左子树节点数目 + 右子树节点数目 + 1(当前节点),返回给上层函数(告诉他爹,我这有这么多节点~)

Ymmmm__的博客 217

力扣222. 完全二叉树的节点个数(Java实现)

计算公式:**树的总高度h - c的层数 - 1 ** = 4 - 3 -1 = 0,即c的右子树节点数 = 2。= 4,说明c的右子树是满二叉树。b的右子树的最左节点层数 = 4,说明 b 的左子树是满二叉树。a的右子树的最左节点层数= 3 < 4,说明右子树是满二叉树。左子树节点数 + b节点数 = 3 + 1 = 4 = 2。右子树节点数 + a节点数 = 3 + 1 = 4 = 2。= 4 - 1 - 1 = 2 ,即右子树的节点数 = 2。= 4 - 2 = 2,即b的左子树节点数 = 2。

Wood_Like的博客 664

LeetCode[222]完全二叉树的节点个数

完全二叉树的性质是:我简单说一下,大概就是其他节点都满了,就是只缺右面的叶子节点,右面叶子节点缺多少都行,只要不是左面少节点就行。这个节点个数可以使用递归左儿子个数+递归右儿子个数+1,这个1是根节点,最后结果为节点个数,但我们没有练习到完全二叉树的性质.知道了这个性质,就直到完全二叉树是由满二叉树组成的,那么我们直接求满二叉树的节点就行,满二叉树的节点数量为depth*2-1。

月亮被咬碎成星星的博客 391

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

LeetCode 222. 完全二叉树的节点个数 给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。 完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2^h 个节点。 题解: 方法一:可以通过遍历的方式求解,时间复杂度为O(n) 方法二: 由完全二叉树的性质可以得知,最后一层的最左侧节点一定不为空,因此可以设置指针node一直往左走,来计算完全二叉树的层数

llzqxl的博客 169

【力扣222题】完全二叉树的节点个数

完全二叉树的特点是除了最后一层外,其他层都是满的,并且最后一层的节点尽可能靠左。

qq_59566194的博客 300

【算法leetcode】222. 完全二叉树的节点个数(rust和go)

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

二当家的白帽子 568

算法学习Day03- 222.完全二叉树的节点个数、 222.完全二叉树的节点个数(leetcode)

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

2401_87984806的博客 165

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

【代码】力扣222. 完全二叉树的节点个数。

myprogramc的博客 150
上一篇: 【go语言圣经1.2】
下一篇: 【go语言圣经1.3】
Pyroyster
博客等级 码龄7年 206粉丝 55原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值