完全二叉树的节点个数

题目链接

完全二叉树的节点个数

题目描述


注意点

  • 题目数据保证输入的树是完全二叉树

解答思路

  • 最初想到的是递归计算子树对应的节点数量,相加就是整个二叉树的节点个数,但是该方法没有用到完全二叉树的特点,考虑是否有更加巧妙地方法
  • 根据完全二叉树的特点:左子树的节点个数一定不会比右子树的少(最后一层叶子节点都集中在左侧),且除最后一层外,前n层的节点总数为[2^n - 1]个
  • 遍历到任意一个根节点时,可以根据其左右子树的高度计算其左右子树的节点个数,如果左子树的高度leftHeight等于右子树的高度rightHeight,说明左子树的节点总数为2^left - 1,右子树需要继续递归确认;如果leftHeight大于rightHeight,说明右子树的节点总数为2^right- 1,左子树需要继续递归确认

代码

class Solution {public int countNodes(TreeNode root) {if (root == null) {return 0;}int leftHeight = countHeight(root.left);int rightHeight = countHeight(root.right);// 左子树为完全二叉树,右子树不确定if (leftHeight == rightHeight) {return (1 << leftHeight) + countNodes(root.right);}// 右子树为完全二叉树,左子树不确定return countNodes(root.left) + (1 << rightHeight);}public int countHeight(TreeNode root) {if (root == null) {return 0;}return countHeight(root.left) + 1;}
}

关键点

  • 完全二叉树的特点
  • 根据左右子树的高度确定左右子树是否是完全二叉树

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

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

相关文章

五步炼丹!qwen通义千问1.5版本微调实战来了!

炼丹第一步&#xff08;数据准备&#xff09; 数据样例 我们需要至少两个json文件放在data目录&#xff0c;一个命名为dataset_info.json&#xff08;注意&#xff1a;这个文件是固定的名称&#xff0c;不要更改&#xff09;&#xff0c;还有一个是微调训练数据json文件名可以…

Day40-45 网络高级(modbus)

文章目录 Modbus起源1.起源&#xff1a;2.分类&#xff1a;3.优势&#xff1a;4.应用场景&#xff1a;5.ModbusTCP特点&#xff1a; Modbus TCP协议格式1.报文头2.寄存器3.功能码 工具软件使用.Modbus Slave&Poll2.网络调试助手.Wireshark的使用 Modbus RTU1、与Modbus TCP…

AIGC笔记--关节点6D位姿按比例融合

1--核心代码 6D位姿一般指平移向量和旋转向量&#xff0c;Maya软件中关节点的6D位姿指的是相对平移向量和欧拉旋转向量&#xff1b; 为了按比例融合两个Pose&#xff0c;首先需要将欧拉旋转向量转换为旋转矩阵&#xff0c;在将旋转矩阵转换为四元数&#xff0c;利用球面线性插值…

【JS逆向学习】猿人学第六题 js混淆 回溯

逆向目标 网址&#xff1a;https://match.yuanrenxue.cn/match/6接口&#xff1a;https://match.yuanrenxue.cn/api/match/6参数&#xff1a;payload(m、q) 逆向过程 老规矩&#xff0c;先来分析网络请求&#xff0c;加密的地方一目了然&#xff0c;没什么可多说的&#xff…

解决ubuntu 22.04新内核6.5.0-15无法编译NVIDIA显卡驱动

这里的新内核应该包括6.5.*系列的 文章目录 遇到的问题&#xff1a; 遇到的问题&#xff1a; 今天我在安装NVIDIA显卡驱动发现了一个问题&#xff0c;主要日志如下所示&#xff1a; make[3]: *** [scripts/Makefile.build:251: /tmp/selfgz1310041/NVIDIA-Linux-x86_64-550.5…

明牌了,这批组态界面算不算颜值担当?

一般来说工业组态图都不会过于追求颜值&#xff0c;好用、易用即可&#xff0c;但是在这个基础上再有颜值&#xff0c;试问谁又会拒绝呢&#xff1f; 哪一个单身狗&#xff0c;不喜欢能力强&#xff0c;有颜值的美女搭档呢&#xff0c;对不。

QT 如何在QPushButton上播放gif(终极版)

在平时浏览网站&#xff0c;或者使用软件的时候&#xff0c;经常可以见到&#xff1a;在点击了某个按钮之后&#xff0c;按钮上会显示动图以及提示文字。在QT中&#xff0c;比较常见且简单的做法就是&#xff1a;给按钮设置一个layout&#xff0c;然后在这个layout里面添加QLab…

瑞芯微ITX-3588J开发板烧录ubuntu桌面系统(图文详解)

首先进入FIrefly官网&#xff0c;这里不仅可以获得它的开发板信息教程&#xff0c;还可以获取到它的升级固件以及工具。 1、首先打开DriverInstall.exe&#xff0c;点击【驱动安装】。 2、点击【安装】&#xff0c;就会进行安装。 3、安装完成后就可以用Type-C数据线连接开发板…

Git的介绍

导出项目依赖 # 以后项目给别人需要导出项目依赖&#xff0c;放在项目路径下&#xff0c;以后在运行项目前&#xff0c;先安装依赖 一般约定俗成都叫 requirements.txt,但是会有别的&#xff1a;req.txt | dev.txt # 两种方式&#xff1a; 1、虚拟环境所有装的第三方&…

YoloV8改进策略:下采样改进|HWD改进下采样

摘要 本文使用HWD改进下采样&#xff0c;在YoloV8的测试中实现涨点。 论文解读 在卷积神经网络&#xff08;CNNs&#xff09;中&#xff0c;极大池化或跨行卷积等下采样操作被广泛用于聚合局部特征、扩大感受野和最小化计算开销。然而&#xff0c;对于语义分割任务&#xff…

关于原型的一些总结

猛然发现太久没去复习了&#xff0c;于是复习了一些知识&#xff0c;顺便冒个泡。本次主要总结的知识点关于原型&#xff0c;再文章后半部分有原型相关的题&#xff0c;感兴趣的可直接观看。 一、原型 1.什么是原型 简单理解&#xff0c;原型就是一个对象&#xff0c;通过原…

洗地机选购技巧:希亦|追觅|添可|海尔洗地机值不值得买?多维度测评对比揭晓

如今市面上的洗地机质量良莠不齐&#xff0c;还有其琳琅满目的功能&#xff0c;让很多新手小白挑花了眼。所以&#xff0c;想要挑选一款适合自己家的洗地机&#xff0c;看似容易实则很难&#xff0c;毕竟洗地机是打扫家务的帮手&#xff0c;如果帮手不给力&#xff0c;效果也会…