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

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

题目

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

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

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

解答

解法一:全部遍历

直接遍历即可。

注意:没用到完全二叉树这个条件,因而不是很好的解。

如果这样做,那这题可看作简单难度。做了对自身也不会有什么提高。

时间复杂度:O(n)

代码
/**
 * 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 root) {
        if(root == null) return 0;
        return countNodes(root.left) + countNodes(root.right) + 1;
    }
}
结果

在这里插入图片描述

解法二:二分

满树计算公式:2^h - 1

获取左右子树的深度。左子树深度 hl ,右子树深度 hr。

有以下两种可能:

  1. hl == hr:左子树为满树,直接计算左子树的节点数,然后继续递归右子树。
  2. hl > hr:右子树为满树(相比左子树少了一层),直接计算右子树的节点数,然后继续递归左子树。

时间复杂度:O(h^2) (h 是树的高度)

(小提示:下述代码还可以更优!若整棵树就是满树,当 hl == hr 时,能不能尝试提前结束递归呢?请自行优化。)

代码
/**
 * 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 root) {
        if(root == null) return 0;
        
        int hl = depth(root.left);
        int hr = depth(root.right);
        if(hl == hr) {
            return 1 + (1 << hl) - 1 + countNodes(root.right); 
        } else {
            return 1 + (1 << hr) - 1 + countNodes(root.left); 
        }
    }
    
    private int depth(TreeNode node) {
        int d = 0;
        while(node != null) {
            node = node.left;
            d ++;
        }
        
        return d;
    }
}
结果

在这里插入图片描述

MCGS触摸屏数据记录与U盘导出配置全解析 在工业自动化现场,数据记录是设备运行状态分析与故障追溯的基础。HMI触摸屏作为人机交互核心,不仅承担实时监控任务,还负责过程数据的存储与导出。理解数据采集周期、存盘机制与存储介质的匹配原理,能帮助工程师高效配置数据记录功能。合理运用定时存盘、存盘组与U盘导出,可支撑设备趋势分析、报表生成及事故排查。本文以MCGS触摸屏为例,详解数据记录的完整组态流程,并汇总常见配置陷阱与排查思路,为现场调试与长期运维提供可落地的技术参考。 阅读详情

相关推荐

DFX从芯片到系统:可制造性、可测试性与可靠性设计实战指南

DFX(Design for eXcellence)是一套面向产品全生命周期的设计方法论,涵盖可制造性(DFM)、可测试性(DFT)、可靠性(DFR)等维度。其核心原理是将制造、测试、维护等环节的约束前置到设计阶段,从而降低流片与量产风险。在芯片与系统硬件领域,DFX不仅是提升良率与测试效率的关键手段,更是保障车规、工控等严苛场景下长期稳定运行的基础。从芯片物理实现到PCB布局,再到系统级散热与维护设计,DFX的落地需要工具链、流程闸门与跨部门协作的体系化支撑。本文基于实际项目经验,分享DFX从设计决策到工

weixin_32349093的博客 349

二叉树11:完全二叉树的节点个数

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

Ge_yangwen的博客 2393

RPA实战-UiPath自动化处理Outlook邮件附件全流程解析

本文详细解析了如何使用UiPath实现Outlook邮件附件的自动化处理全流程,涵盖环境配置、核心流程实现、高级功能扩展及性能优化技巧。通过RPA技术,企业可大幅提升邮件附件处理效率,减少人工操作错误,适用于财务、物流等多个场景。

weixin_33701251的博客 426

二叉树——222.完全二叉树的节点个数(递归+迭代)

222. 完全二叉树的节点个数 给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。 完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。 提示: 树中节点的数目范围是[0, 5 * 104] 0 <= Node.val <= 5 * 104 题目数据保证输入的树是完全二叉树 解题思路:这个题解题思路可以分为两种...

getinobacar的博客 2504

Win10 + Linux 双系统删除(Linux)

删除Linux所使用的磁盘分区 进入此电脑->计算机->管理->磁盘管理

weixin_52247624的博客 943

Fast DDS源代码走读

DDS, PDP, EPD, DataWriter, DataReader

weixin_43082062的博客 711

完全二叉树的结点数

完全二叉树有一个关于结点数的性质: 结点从1开始编号,层序。那么分每一个结点(编号为i)的左孩子结点是2i,右孩子结点编号是2i+1. 反之,根据孩子结点的编号可以推知父结点的编号:孩子结点编号的一半取整。下面是一个应用的例子: 一棵完全二叉树有1001个结点。其中叶结点的个数是几个? 分析: 1001个结点,则最后一个结点的编号是1001,那么它的父亲结点编号是500,注意,这个并不一

m0_37701448的博客 5541

YOLOv11改进策略【注意力机制篇】| SE、CBAM、ECA、CA、Swin Transformer等注意力机制全面解析与应用

本文详细介绍了五种主流的注意力机制及其在YOLOv11中的应用。通过合理的模块选择和位置部署,注意力机制能够显著提升目标检测性能。

QQ_778132974的博客 873

排序算法学习之堆排序

百度百科对堆排序的解释: 堆排序(英语:Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。 简单的就是将一个数组看作是一个二叉树,然后每个父节点跟自己的子节点比较,最大的就成为父节点。如下图 当第一轮对比完之后,二叉树的根节点肯定是最大,然后将根节点和最后一个节点交换,然后最后一个节点就是最大的数,第二轮对比就是比对0至倒数第二个数。 由上排序的总规...

qq_43439125的博客 351

ISO 21434汽车网络安全标准深度解读系列(十):标准实施总结与展望

ISO21434标准深度解读系列总结篇系统回顾了汽车网络安全标准的核心内容与实施要点。文章梳理了10篇系列文章的结构体系,提炼出标准的三大核心价值:系统性方法(全生命周期覆盖、多层次管理)、风险导向理念(威胁驱动、动态管理)和供应链协同机制。总结了实施经验中的关键要素,包括高层承诺、专业团队建设,并提出了分阶段实施路径建议。同时分析了当前面临的技术挑战(系统复杂性、新兴技术)和管理挑战(文化转变、资源投入)。最后展望了AI应用、零信任架构等技术发展趋势,以及标准未来的演进方向,为企业实施提供战略与执行层面的

VehSwHwDeveloper的博客 557

vue3:最新实现腾讯人脸核身+增强版人脸核身使用方法及示例源码,Vue3如何使用腾讯云慧眼人脸核身,提供人脸核身案例、身份信息核验、活体检测与核身比对等示例代码(后端spring与thinkphp)

vue3接入腾讯人脸核身,腾讯云人脸核身Vue3+后端代码,H5人脸核身,vue3 H5如何使用腾讯人脸核身sdk,vue3+thinkphp腾讯人脸核身,Spring Boot接入腾讯云人脸核身教程,hinkphp腾讯人脸核身,vue3人脸核身插件接入流程,vue+spring boot实现腾讯人脸核身,vue3接入腾讯云【增强版人脸核身接入】,vue3 h5微信公众号网页腾讯云慧眼人脸核身,tvue3接入人脸核身SDK,vue3+typescrip+vite接入慧眼实名认证,vue3腾讯云活体人脸核身(

✅ 精选推荐文章 4119

面试经典算法系列之二叉树16 -- 完全二叉树的节点个数

公众号:阿Q技术站。

qq_44630255的博客 928

正确解决Authentication plugin ‘caching _sha2_password’ cannot be loaded:异常的有效解决方法

正确解决Authentication plugin ‘caching _sha2_password’ cannot be loaded:异常的有效解决方法

wbajsjhhhhh的博客 1万+

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

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

ylumwd的博客 1104

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

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

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

yyh520025的博客 1334

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

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

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

2301_80211119的博客 726

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

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

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

qq_40263592的博客 1069

leetcode222 完全二叉树的节点个数

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

dokii1的博客 504

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

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

2401_82472941的博客 590

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

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

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

weixin_48613005的博客 604

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

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

工匠精神coding,终生学习 437

leetcode222.完全二叉树节点个数

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

Ymmmm__的博客 217

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

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

Love Peace 166

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

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

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

力扣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 199. 二叉树的右视图
一纸浮萍
博客等级 码龄9年 11粉丝 103原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值