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

leetcode刷题日记——完全二叉树的节点个数

[ 题目描述 ]:
在这里插入图片描述
[ 思路 ]:

  • DFS,深度优先搜索,遍历树的每一个节点,统计这个节点左右两个孩子节点的个数,再加上它自己的节点个数
  • 运行如下
    在这里插入图片描述
int countNodes(struct TreeNode* root) {if(!root) return 0;int left=countNodes(root->left);int right=countNodes(root->right);return left+right+1;
}

[ 官方题解 ]:

  • 方法一:二分查找 + 位运算,主要利用完全二叉树的特性来计算节点个数,最左边的节点一定处于最底层,可以先求出层高h,然后可以得出节点范围,然后通过二分查找去缩小范围,一直到正确
bool exists(struct TreeNode* root, int level, int k) {int bits = 1 << (level - 1);struct TreeNode* node = root;while (node != NULL && bits > 0) {if (!(bits & k)) {node = node->left;} else {node = node->right;}bits >>= 1;}return node != NULL;
}int countNodes(struct TreeNode* root) {if (root == NULL) {return 0;}int level = 0;struct TreeNode* node = root;while (node->left != NULL) {level++;node = node->left;}int low = 1 << level, high = (1 << (level + 1)) - 1;while (low < high) {int mid = (high - low + 1) / 2 + low;if (exists(root, level, mid)) {low = mid;} else {high = mid - 1;}}return low;
}
http://www.xdnf.cn/news/678583.html

相关文章:

  • Java怎么实现父子线程的值传递?InheritableThreadLocal类和transmittable-thread-local类?
  • Unity3D仿星露谷物语开发53之库存管理页面
  • Introduction to SQL
  • 【键盘说明书备份】ENERGYFORT
  • 编程日志5.27
  • MySQL :MySQL基本概念
  • 高性能计算 | 硅光芯片代工厂揭秘——技术特点与未来演进
  • SpringBoot集成jwt,实现token验证
  • 鸿蒙OSUniApp 实现自定义的侧边栏菜单组件#三方框架 #Uniapp
  • SQLord: 基于反向数据生成和任务拆解的 Text-to-SQL 企业落地方案
  • CMake 在尝试下载 Boost 时失败:SHA256 校验和与预期值不匹配
  • 【第1章 基础知识】1.8 在 Canvas 中使用 HTML 元素
  • 力扣HOT100之回溯:131. 分割回文串
  • 基于Matlab实现各种光谱数据预处理
  • Turf.js:前端地理空间分析的瑞士军刀
  • 2025山东CCPC补题
  • 基于Python的简易聊天机器人实现:从原理到实践
  • 组合API-provide和inject函数
  • 多模态机器学习
  • Android 开发:从 View Activity 向 Compose Activity 传递数据的多种实现方式
  • [yolov11改进系列]基于yolov11引入可改变核卷积AKConv的python源码+训练源码
  • QCustomPlot设置曲线图中文字缩放大小
  • 微信小程序一次性订阅封装
  • Linux 权限管理基础:深入理解 root 与 sudo 的用法
  • 【监控】Spring Boot 应用监控
  • libvirt设置虚拟机mtu实现原理
  • 决策树 GBDT XGBoost LightGBM
  • ETL数据集成过程全流程优化指南
  • ICMP与TCP端口:网络层与传输层解析
  • 尚硅谷redis7 49-51 redis管道之理论简介