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

二叉树 - 完全二叉树的节点个数

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

在这里插入图片描述
在这里插入图片描述

方法一:递归

/*** Definition for a binary tree node.* function TreeNode(val, left, right) {*     this.val = (val===undefined ? 0 : val)*     this.left = (left===undefined ? null : left)*     this.right = (right===undefined ? null : right)* }*/
/*** @param {TreeNode} root* @return {number}*/
var countNodes = function (root) {// 递归法计算二叉树节点数// 1. 确定递归函数参数const getNodeSum = function (node) {// 2. 确定终止条件if (node === null) {return 0;}// 确定单层递归逻辑let leftNum = getNodeSum(node.left);let rightNum = getNodeSum(node.right);return leftNum + rightNum + 1;}return getNodeSum(root);
}

方法二:迭代(层序遍历)

/*** Definition for a binary tree node.* function TreeNode(val, left, right) {*     this.val = (val===undefined ? 0 : val)*     this.left = (left===undefined ? null : left)*     this.right = (right===undefined ? null : right)* }*/
/*** @param {TreeNode} root* @return {number}*/
var countNodes = function (root) {// 层序遍历let queue = [];if (root === null) {return 0;}queue.push(root);let nodeNums = 0;while (queue.length) {let length = queue.length;while (length--) {let node = queue.shift();nodeNums++;node.left && queue.push(node.left);node.right && queue.push(node.right);}}return nodeNums;
};

方法三:完全二叉树性质

/*** Definition for a binary tree node.* function TreeNode(val, left, right) {*     this.val = (val===undefined ? 0 : val)*     this.left = (left===undefined ? null : left)*     this.right = (right===undefined ? null : right)* }*/
/*** @param {TreeNode} root* @return {number}*/
var countNodes = function (root) {// 利用完全二叉树的特点if (root === null) {return 0;}let left = root.left;let right = root.right;let leftDepth = 0, rightDepth = 0;while (left) {left = left.left;leftDepth++;}while (right) {right = right.right;rightDepth++;}if (leftDepth == rightDepth) {return Math.pow(2, leftDepth + 1) - 1;}return countNodes(root.left) + countNodes(root.right) + 1;
};

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • springsecurity 在web中如何获取用户信息(后端/前端)
  • 建筑项目管理软件市场新风向,10款热门软件解析
  • Python3.11使用labelimg
  • Android Activity 的启动模式(Launch Mode)
  • echarts倾斜横向堆叠柱状图
  • Spring系列之Spring Cache缓存注解的使用
  • 《第二十八章:性能优化 - 电量优化》
  • Java | Leetcode Java题解之第371题两整数之和
  • 云原生系列 - Nginx(高级篇)
  • 【Linux】分析一段oom及oops报错日志
  • MySQL(面试篇)
  • #Datawhale X 李宏毅苹果书 AI夏令营#3.13.2局部极小值与鞍点批量和动量
  • ‘asyncio‘ with OpenAI API Call Hangs After Extended Run Time
  • 【AI】阿里云AI开发平台PAI:构建智能未来
  • clickhouse 原理详解
  • 4. 路由到控制器 - Laravel从零开始教程
  • github从入门到放弃(1)
  • HTTP 简介
  • Javascripit类型转换比较那点事儿,双等号(==)
  • Javascript Math对象和Date对象常用方法详解
  • js
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • node 版本过低
  • Node项目之评分系统(二)- 数据库设计
  • passportjs 源码分析
  • TypeScript迭代器
  • vuex 学习笔记 01
  • Web设计流程优化:网页效果图设计新思路
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 理解在java “”i=i++;”所发生的事情
  • 延迟脚本的方式
  • 一个项目push到多个远程Git仓库
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • 大数据全解:定义、价值及挑战
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (PySpark)RDD实验实战——取最大数出现的次数
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (三分钟)速览传统边缘检测算子
  • (十六)Flask之蓝图
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • .Net7 环境安装配置
  • .secret勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复
  • /usr/bin/env: node: No such file or directory
  • /usr/local/nginx/logs/nginx.pid failed (2: No such file or directory)
  • :not(:first-child)和:not(:last-child)的用法
  • @require_PUTNameError: name ‘require_PUT‘ is not defined 解决方法
  • [240527] 谷歌 CEO 承认 AI 编造虚假信息问题难解(此文使用 @gemini 命令二次创作)| ICQ 停止运作
  • [ACM独立出版]2024年虚拟现实、图像和信号处理国际学术会议(ICVISP 2024)
  • [Android View] 可绘制形状 (Shape Xml)
  • [Angular] 笔记 8:list/detail 页面以及@Input
  • [AutoSar]BSW_OS 02 Autosar OS_STACK
  • [AutoSar]状态管理(五)Dcm与BswM、EcuM的复位实现
  • [C#学习笔记]Newtonsoft.Json
  • [ERR] 1273 - Unknown collation: ‘utf8mb4_0900_ai_ci‘(已解决)