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

news2024/12/25 2:00:27

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;
};

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

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

相关文章

多商户2.3.0后台顶部添加修改密码修复方法

问题:后台登录不能修改自己的密码; 解决方法: 修改前端代码,文件路径(平台后台,商户后台一样的修改方法):src/layout/navBars/breadcrumb/user.vue 修改第一处 代码: 修…

IM即时通讯给娱乐社交、游戏等行业带来了什么影响?看这篇就知道

企业IM即时通讯技术的发展和应用,对我们的生活、工作、沟通和交流带来了显著的影响和改变。 IM即时通讯技术的发展不仅改变了我们的沟通方式,还提高了工作效率,促进了团队协作,保障了信息安全,并推动了业务创新。随着技…

机器人学导论之连杆参数

目录 一、连杆参数[1] 二、将下肢看作二连杆结构 三、参考文献 一、连杆参数[1] 1.1关节角 绕轴,从旋转到的角度。 备注:从z轴正方向看,顺时针为正,逆时针为负。 图 1 平面三连杆操作臂 以图1为例子, 表示…

文献解读-农业-第二十九期|《β-淀粉酶和磷脂酸参与板栗种子萌发》

关键词:农业;基因测序;变异检测; 文献简介 标题(英文):Beta-amylase and phosphatidic acid involved in recalcitrant seed germination of Chinese chestnut标题(中文&#xff09…

岩土工程中的渗流问题:有限单元法的理论与实践

有限单元法在岩土工程问题中应用非常广泛,很多商业软件如Plaxis/Abaqus/Comsol等都采用有限单元解法。尽管各类商业软件使用方便,但其使用对用户来说往往是一个“黑箱子”。相比而言,开源的有限元程序计算方法透明、计算过程可控,…

宝藏!盟主自控独家讲义:《掌中宝》(精卫篇)1-9章:甄选部分

本文内容,全部选自自动化考研联盟的:盟主自控独家讲义:《掌中宝》(精卫篇)。 Part1:资料封面&目录 Part2:资料各个章节具体内容 自控专属数学基础储备 第1章 自动控制的基本概念 第2章 控制系统的数学模型 第3章…

8.26算法训练

1.八皇后 Checker Challenge 输入: 6输出: 2 4 6 1 3 5 3 6 2 5 1 4 4 1 5 2 6 3 4是以前寒假写过的题目,所以有的影响,大致思路就是用深度遍历然后判断是否在对角线上就ok了,有大概思路的话, 还是不难的…

比特币的签名和验证(基于ECDSA)

比特币(Bitcoin)和以太坊(Ethereum)等区块链技术使用了加密算法来确保交易的安全性。私钥签名和公钥验证是这些算法的核心部分,主要用于证明交易的发起者拥有交易中使用的资金的控制权,而不需要暴露私钥本身…

【开源分享】java+swing+mysql简单学生信息管理系统设计与实现

个人主页:程序员杨工 个人简介:从事软件开发多年,前后端均有涉猎,具有丰富的开发经验 博客内容:全栈开发,分享Java、Python、Php、小程序、前后端、数据库经验和实战 文末有本人名片,希望和大家…

大模型学习全面教程:零基础入门至精通,一篇文章全掌握

人人都看得懂的大模型简介 大模型就像一座庞大的图书馆,里面有非常多的书籍。但与普通图书馆不同的是,这座图书馆中的每本书都是关于不同事物的描述和知识。而这些书籍中的每一页都代表了这个事物的一些特征或细节。现在,想象一下&#xff0…

蓝牙耳机哪个品牌最具有性价比?四大性价比拉满产品推荐!

蓝牙耳机哪个品牌最具有性价比?目前市面上的蓝牙耳机层出不重,蓝牙耳机的的品类也五花八门的,想要选择一款满意的蓝牙耳机也是需要花费一定的时间,大家购买时一定要格外注意,劣质耳机产品不仅使耳朵受到伤害&#xff0…

Python与Plotly实现多维度数据的动态可视化——交互式股票价格

目录 准备工作安装必要的库导入库 获取数据数据预处理创建交互式图表方法一:基本多线图方法二:带有滚动和区间选择的交互式图表方法三:可视化股票每日回报率的箱线图方法四:添加注释和标记的交互式图表 完整代码 在金融数据分析中…

ubuntu 小技巧 upower 查看电源模块之电池等功能

电脑使用时间久了,电池不耐用了,查看一下具体还剩多少容量,怎么看? ros2ros2-aspire4741:~$ upower -e /org/freedesktop/UPower/devices/battery_BAT0 /org/freedesktop/UPower/devices/line_power_ADP1 /org/freedesktop/UPowe…

C++ TinyWebServer项目总结(11. 定时器)

网络程序需要处理定时事件,如定期检测一个客户连接的活动状态。服务器程序通常管理着众多定时事件,有效地组织这些定时事件,使其在预期的时间被触发且不影响服务器的主要逻辑,对于服务器的性能有至关重要的影响。为此,…

“信”欣向荣,共“创”共赢 | 华宇TAS应用中间件认证工程师培训报名通道开启

信创,即“信息技术应用创新”。我国自主信息产业聚焦信息技术应用创新,旨在通过对IT硬件、软件等各个环节的重构,基于我国自有IT底层架构和标准,形成自有开放生态,从根本上解决本质安全问题,实现信息技术可…

牛客周赛 Round 57

A-小红喜欢1_牛客周赛 Round 57 (nowcoder.com) 思路&#xff1a; 简单记录一下 代码&#xff1a; #include<iostream> #include<algorithm> #include<cstring> #include<vector> #include<queue> #include<cmath> #define int long long…

CH340K的一个小bug

如果CH340和MCU在同一张PCB上&#xff0c;但是CH340用VUSB来供电&#xff0c;MCU用另外的3.3V电源单独供电。两块芯片只有TX&#xff0c;RX和GND直接相连接&#xff0c;DTR串联一个电容连接到MCU的Reset引脚。也就是说正常工作环境下不通过USB连接电脑&#xff0c;只有MUC工作&…

深度学习入门-08

基于小土堆学习 神经网络的搭建 神经网络pytorch官方文档&#xff1a; pytorch官方说明文档 torch.nn是pytorch存放神经网络的工具箱 Containers Containers&#xff08;容器&#xff09;在神经网络中通常不是一个特指的技术术语&#xff0c;但在编程和数据处理中&#xff0…

流体力学告诉你,如何最快地炫一瓶啤酒?

夏季的夜晚&#xff0c;是属于烧烤和啤酒的。三五好友聚会&#xff0c;总有人能在你面前快速且优雅地炫一瓶啤酒&#xff0c;成为桌上的明星。 浅浅研究一下&#xff0c;水从瓶子里流出的过程&#xff0c;慢放后发现&#xff0c;包含两步。第一步&#xff0c;水从瓶口流出&…

直流充电桩测试仪的步骤和规范

直流充电桩测试仪是一种用于检测和评估直流充电桩性能的设备。它可以对充电桩的输出电压、电流、功率等参数进行精确测量&#xff0c;以确保充电桩的正常工作和安全使用。以下是直流充电桩测试仪的步骤和规范&#xff1a; 1. 准备工作&#xff1a;首先&#xff0c;需要确保测试…