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

题目描述

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

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

题目示例

在这里插入图片描述

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

解题思路

在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2^(h-1) 个节点。
在这里插入图片描述
可以看出如果整个树不是满二叉树,就递归其左右孩子,直到遇到满二叉树为止,用公式计算这个子树(满二叉树)的节点数量。

这里关键在于如何去判断一个左子树或者右子树是不是满二叉树呢?

在完全二叉树中,如果递归向左遍历的深度等于递归向右遍历的深度,那说明就是满二叉树。

在这里插入图片描述

参考代码

class Solution {public int countNodes(TreeNode root) {// 普通二叉树使用任何方式都可以计算节点个数// 但是这是完全二叉树,目的很明确,让你用完全二叉树的特性// 利用完全二叉树的特性来求节点个数// 满二叉树,最左侧深度和最右侧深度是一样的// 完全二叉树内总有一个满二叉树if(root == null) return 0;TreeNode left = root.left;TreeNode right = root.right;int leftDepth = 0;int rightDepth = 0;while(left != null) {leftDepth++;left = left.left;}while(right != null) {rightDepth++;right = right.right;}if(leftDepth == rightDepth) {return (2 << leftDepth) - 1;}int leftNum = countNodes(root.left);int rightNum = countNodes(root.right);return leftNum + rightNum + 1;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/674881.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[职场] 线束设计求职简历范文 #媒体#其他#笔记

线束设计求职简历范文 线束设计是指根据汽车电气系统的需求和规范&#xff0c;进行车载线束的布局、连接和组装的过程。下面是线束设计求职简历范文&#xff0c;供大家参考。 个人信息 姓名&#xff1a;蓝山 年龄&#xff1a;26岁 地址&#xff1a;东莞 工作经验&#xff…

C++面试宝典第27题:完全平方数之和

题目 给定正整数 n,找到若干个完全平方数(比如:1、4、9、16、...),使得它们的和等于n。你需要让组成和的完全平方数的个数最少。 示例1: 输入:n = 12 输出:3 解释:12 = 4 + 4 + 4。 示例2: 输入:n = 13 输出:2 解释:13 = 4 + 9。 解析 这道题主要考察应聘者对于…

MFC研发自验用例编写应注意哪些关键测试点

MFC&#xff08;Microsoft Foundation Classes&#xff09;是一个用于开发Windows应用程序的C类库。在MFC应用程序的研发过程中&#xff0c;自验用例&#xff08;自我验证测试用例&#xff09;的编写是非常重要的一环&#xff0c;它有助于确保代码的质量、稳定性和功能正确性。…

Docker安装ElasticSearch8.9.0

安装ElasticSearch8.9.0 预先配置 1.在centos虚拟机中&#xff0c;修改配置sysctl.conf vim /etc/sysctl.conf2.加入配置 vm.max_map_count262144 3.启用配置 sysctl -p 注&#xff1a;这一步是为了防止启动容器时&#xff0c;报出如下错误&#xff1a; bootstrap checks …

MySQL- 运维-分库分表-Mycat

一、Mycat概述 1、安装 2、概念介绍 二、Mycat入门 启动服务 三、Mycat配置 1、schema.xml 2、rule.xml 3、server.xml 四、Mycat分片 1、垂直分库 2、水平分表 五、Mycat管理及监控 1、Mycat原理 2、Mycat管理工具 &#xff08;1&#xff09;、命令行 &#xff08;2&#…

【软件设计师】普及软件知识产权中的商标法与专利法

&#x1f413; 商标法及实施条例 《中华人民共和国商标法》&#xff0c;自最早于1963年通过的第一版以来&#xff0c;已经做了多次修订&#xff0c;现在执行的是2001年10月27日通过、正式实施的。 &#x1f413; 注册商标 什么是商标 任何能够将自然人、法人及组织的商品与他…

【RPA】浅谈RPA技术及其应用

摘要&#xff1a;随着信息技术的飞速发展&#xff0c;企业对于自动化、智能化的需求日益增强。RPA&#xff08;Robotic Process Automation&#xff0c;机器人流程自动化&#xff09;技术应运而生&#xff0c;为企业提供了全新的自动化解决方案。本文首先介绍了RPA技术的基本概…

visiontransformerVIT

虽然 Transformer 架构已成为自然语言处理任务的事实标准&#xff0c;但其在计算机视觉中的应用仍然有限。在视觉上&#xff0c;注意力要么与卷积网络结合使用&#xff0c;要么用于替换卷积网络的某些组件&#xff0c;同时保持其整体结构不变。我们表明&#xff0c;这种对 CNN …

软件应用实例分享,电玩计时计费怎么算,佳易王PS5游戏计时器系统程序教程

软件应用实例分享&#xff0c;电玩计时计费怎么算&#xff0c;佳易王PS5游戏计时器系统程序教程 一、前言 以下软件教程以 佳易王电玩计时计费管理系统软件V17.9为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 点击开始计时后&#xff0c;图片…

python使用正则匹配判断字符串中含有某些特定子串及正则表达式详解

目录 一、判断字符串中是否含有字串 二、正则表达式 &#xff08;一&#xff09;基本内容 1.正则表达式修饰符——可选标志 2.正则表达式模式 &#xff08;二&#xff09;常见表达式函数 一、判断字符串中是否含有字串 in&#xff0c;not in 判断字符串中是否含有某些关…

hashmap的get原理

HashMap的 get() 方法用于根据给定的键获取对应的值。下面是HashMap的get()方法的大致原理&#xff1a; 首先&#xff0c;get() 方法会计算传入键的哈希码&#xff08;hash code&#xff09;。通过调用键对象的 hashCode() 方法来获取键的哈希码。 接下来&#xff0c;get() 方…

使用easyExcel 定义表头 字体 格式 颜色等,定义表内容,合计

HeadStyle 表头样式注解 HeadFontStyle 表头字体样式 HeadStyle(fillPatternType FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor 22) HeadFontStyle(fontHeightInPoints 12) 以下为实现效果

python实现rdbms和neo4j的转换

python&neo4j 一、连接neo4j二、rdbms转换到neo4j三、常见报错<一>、ValueError: The following settings are not supported 一、连接neo4j 下载依赖库 pip install py2neo连接neo4j from py2neo import Graph graph Graph("bolt://localhost:7687", …

Unity BuffSystem buff系统

Unity BuffSystem buff系统 一、介绍二、buff系统架构三、架构讲解四、框架使用buff数据Json数据以及工具ShowTypeBuffTypeMountTypeBuffOverlapBuffShutDownTypeBuffCalculateType时间和层数这里也不过多说明了如何给生物添加buff 五、总结 一、介绍 现在基本做游戏都会需要些…

leetcode-3的幂

326. 3 的幂 题解&#xff1a; 要判断一个整数是否是3的幂次方&#xff0c;我们可以使用循环或递归的方法。首先&#xff0c;我们需要处理一些特殊情况&#xff0c;例如当n为0时&#xff0c;返回false&#xff1b;当n为1时&#xff0c;返回true。然后&#xff0c;我们可以通过…

【Nicn的刷题日常】之有序序列合并

1.题目描述 描述 输入两个升序排列的序列&#xff0c;将两个序列合并为一个有序序列并输出。 数据范围&#xff1a; 1≤&#xfffd;,&#xfffd;≤1000 1≤n,m≤1000 &#xff0c; 序列中的值满足 0≤&#xfffd;&#xfffd;&#xfffd;≤30000 0≤val≤30000 输入描述…

学习总结15

# 封印 ## 题目背景 很久以前&#xff0c;魔界大旱&#xff0c;水井全部干涸&#xff0c;温度也越来越高。为了拯救居民&#xff0c;夜叉族国王龙溟希望能打破神魔之井&#xff0c;进入人界“窃取”水灵珠&#xff0c;以修复大地水脉。可是六界之间皆有封印&#xff0c;神魔之…

C++基础知识点预览

一.绪论&#xff1a; 1.1 C简史&#xff1a; 与C的关系&#xff1a; 被设计为C语言的继任者&#xff0c;C语言是一种过程型语言&#xff0c;程序员使用它定义执行特定操作的函数&#xff0c;而C是一种面向对象的语言&#xff0c;实现了继承、抽象、多态和封装等概念。C支持类&…

【RPA】智能自动化的未来:AI + RPA

伴随着人工智能&#xff08;AI&#xff09;技术的迅猛进步&#xff0c;机器人流程自动化&#xff08;RPA&#xff09;正在经历一场翻天覆地的变革。AI为RPA注入了新的活力&#xff0c;尤其在处理复杂任务和制定决策方面。通过融合自然语言处理&#xff08;NLP&#xff09;、机器…

从0开始学Docker ---Docker安装教程

Docker安装教程 本安装教程参考Docker官方文档&#xff0c;地址如下&#xff1a; https://docs.docker.com/engine/install/centos/ 1.卸载旧版 首先如果系统中已经存在旧的Docker&#xff0c;则先卸载&#xff1a; yum remove docker \docker-client \docker-client-latest…