代码随想录刷题笔记-Day15

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

222. 完全二叉树的节点个数icon-default.png?t=N7T8https://leetcode.cn/problems/count-complete-tree-nodes/

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

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

解题思路

完全二叉树的特点就是最后一层靠左边的是完全有节点的。

常规思路就是O(n)进行遍历,但是这是一个完全二叉树,肯定是可以利用完全二叉树的特性来完成的。

如果这是一颗满二叉树,那么节点数目为2的n次方减1,如果不是满二叉树,那就分别计算左右子树的节点个数。而左右子树的个数又可以根据是不是满二叉树进行计算。这就可以依据递归实现。

终止条件:节点为null或左右子树深度相等

返回值是左右子树节点个数相加再加1,或者2的n次方-1

代码

class Solution {
    public int countNodes(TreeNode root) {
        if (root == null)
            return 0;
        TreeNode left = root;
        TreeNode right = root;
        int deep = 0;
        while (left != null && right != null) {
            left = left.left;
            right = right.right;
            deep++;
        }
        if (left == null && right == null) {
            return (int) Math.pow(2, deep) - 1;
        } else {
            return countNodes(root.left) + countNodes(root.right) + 1;
        }
    }
}

2.平衡二叉树

110. 平衡二叉树icon-default.png?t=N7T8https://leetcode.cn/problems/balanced-binary-tree/

给定一个二叉树,判断它是否是高度平衡的二叉树。

本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。

示例 1:

输入:root = [3,9,20,null,null,15,7]
输出:true

示例 2:

输入:root = [1,2,2,3,3,null,null,4,4]
输出:false

示例 3:

输入:root = []
输出:true

解题思路

这道题的平衡二叉树只和高度差有关,左右子树的高度差不大于1的情况下就为平衡二叉树。

但是返回值不能是true,因为涉及到高度的传递。

所以返回值为int类型。由于当子树高度差超过1后,无法马上return false。为了防止后续迭代进行额外的操作。使用标志位-1,发现-1就说明不会是平衡二叉树了,直接返回-1。

终止条件:root为null的时候,返回0;

代码

class Solution {
    public boolean isBalanced(TreeNode root) {
        return getHeight(root) != -1;
    }

    public int getHeight(TreeNode root) {
        if (root == null)
            return 0;
        int left = getHeight(root.left);
        int right = getHeight(root.right);
        if (left == -1 || right == -1)
            return -1;
        if (Math.abs(left - right) > 1)
            return -1;
        return Math.max(left, right) + 1;
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

课时7:shell基础_shell简介

1.3.1 shell简介 学习目标 这一节,我们从 运维、shell语言、小结 三个方面来学习。 运维 简介 运维是什么?所谓的运维,其实就是公司的内部项目当中的一个技术岗位而已,它主要做的是项目的维护性工作。它所涉及的内容范围非常…

Redhat 8.4 一键安装 Oracle 11GR2 单机版

Oracle 一键安装脚本,演示 Redhat 8.4 一键安装 Oracle 11GR2 单机版过程(全程无需人工干预):(脚本包括 ORALCE PSU/OJVM 等补丁自动安装) ⭐️ 脚本下载地址:Shell脚本安装Oracle数据库 脚本…

插接母线温度在线监测系统研究与应用

摘要:低压封闭式插接母线是供配电设施的关键部件,安装在生产车间内部高空,不易保养和维护,在安装不良或保养不当时易发生故障。插接点温度的异常变化与母线故障的发生有着密切的关系,以汽车整车制造工厂为例&#xff0…

Unity 策略模式(实例详解)

文章目录 简介示例1:角色攻击行为示例2:游戏内购折扣策略示例3:NPC寻路策略示例4:动画过渡策略示例5:敌人AI决策策略 简介 在Unity中使用策略模式,我们可以将不同的行为或算法封装成独立的类(策…

SpringMVC 自动配置

SpringMVC 自动配置 一、WebMvcAutoConfiguration(SpringMVC自动配置)二、DisPatcherServletAutoConfiguration.class(中央调度器自动配置)三、WebMvcConfigurationSupport(SpringMVC组件配置类)四、Servle…

iOS 17.4 苹果公司正在加倍投入人工智能

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

网络隔离场景下访问 Pod 网络

接着上文 VPC网络架构下的网络上数据采集 介绍 考虑一个监控系统,它的数据采集 Agent 是以 daemonset 形式运行在物理机上的,它需要采集 Pod 的各种监控信息。现在很流行的一个监控信息是通过 Prometheus 提供指标信息。 一般来说,daemonset …

低功耗蓝牙(BLE) 和 经典蓝牙(SPP) 的区别

低功耗蓝牙(BLE) vs 经典蓝牙(SPP) 区别项低功耗蓝牙(BLE)经典蓝牙(SPP 串行端口协议)蓝牙版本蓝牙版本 > 4.0,又称蓝牙低功耗、蓝牙智能经典蓝牙2.0 或更早版本,经典配对模式在两台蓝牙设备之间建立虚拟串口数据连接,提供一种简单而直接…

06.VLAN、Trunk和Hybrid配置

文章目录 一. 初识VLAN1.1. VLAN概述1.2. VLAN的优势1.3. VLAN的帧格式1.4. 接口链路类型1.5. 默认VLAN1.6. VLAN划分方式 二. 实验题2.1. 实验1:划分VLAN2.1.1. 实验目的2.1.2. 实验拓扑图2.1.3. 实验步骤(1)配置PC机的IP地址(2&…

stable diffusion学习笔记——文生图(二)

LORA和Embeddings都可以对画面内容进行调整。目前LORA主要用来定义画面特征,如具体的人物,衣物,画风等。Embeddings目前主要用于反面提示词中,用来避免错误的画面表现。 LORA lora的全称为:低秩适应模型。lora的基本…

05. 交换机的基本配置

文章目录 一. 初识交换机1.1. 交换机的概述1.2. Ethernet_ll格式1.3. MAC分类1.4. 冲突域1.5. 广播域1.6. 交换机的原理1.7. 交换机的3种转发行为 二. 初识ARP2.1. ARP概述2.2. ARP报文格式2.3. ARP的分类2.4. 免费ARP的作用 三. 实验专题3.1. 实验1:交换机的基本原…

常用芯片学习——AMS1117芯片

AMS1117 1A 低压差线性稳压器 使用说明 AMS1117 是一款低压差线性稳压电路,该电路输出电流能力为1A。该系列电路包含固定输出电压版本和可调输出电压版本,其输出电压精度为士1.5%。为了保证芯片和电源系统的稳定性,XBLWAMS1117 内置热保护和…

Nulls: Nothing to Worry About

本文是文章Nulls: Nothing to Worry About的翻译笔记。 避免三值逻辑出现问题。 ISO SQL 标准中的NULL可以是任何东西,但不是一个值。 NULL是指示完全缺乏值的标记。 它们会导致三值逻辑,使用起来很混乱,而且这种混乱常常导致粗心的人编写返…

20240126收获

el-table比较常见的需要跳转column的场景,目前遇到三种,一种是前面列变成序号,用的是typeindex和:index来设置索引,第二种是变成多选,用的是typeselect和在table上加上select-change事件,第三种…

指针操作一维字符型数组和及回调函数------努力学习嵌入式的第十四天!今天的内容让人脑瓜子嗡嗡的 着重复习

总结 1.快速排序 注意: 第二三步并不能反过来 要想降序排列只需要加将比较的符号换一下 2.指针操作一维字符型数组 (const) char *s "hello"; *sH; //错误 char s[]"hello"; s[0] B char *strncpy(char *d…

掌握 Android JNI 基础

写在前面 最近在看一些底层源码,发现 JNI 这块还是有必要系统的看一下,索性就写一写博客,加深加深印象🍻 本文重点聊一聊一些干货,避免长篇大论 JNI 概述 JNI 是什么? 定义:Java Native In…

全国网络安全行业职业技能大赛WP

word_sercet 文档被加密 查看图片的属性 在备注可以看到解压密码 解密成功 在选项里面把隐藏的文本显示出来 可以看到ffag easy_encode 得到一个bmp二维码 使用qr research 得到的密文直接放瑞士军刀 base32解码base64解码hex解码 dir_pcap 直接搜索flag 发现flag…

C++ 程序使用 OpenCV 可视化和分析两个图像之间特征点的对应关系

文章目录 代码功能源码文件编译文件 代码功能 创建图像和生成随机特征点: 程序首先创建两个灰度图像(m_image_Left_BGR 和 m_image_Right_BGR),并将它们转换为彩色图像。然后,生成两组随机特征点(mvKeys 和…

线段树分治总结

线段树分治总结 概念例题二分图 /【模板】线段树分治[HAOI2017] 八纵八横[FJOI2015] 火星商店问题EnvyExtending Set of PointsForced Online Queries Problem「雅礼集训 2018 Day10」贪玩蓝月BZOJ4184-shallot[bzoj4644]经典**题 概念 \qquad 线段树分治一般用来解决带有如下两…

强敌环伺:金融业信息安全威胁分析——整体态势

从早期的Zeus和其他以银行为目标的特洛伊木马程序,到现在的大规模分布式拒绝服务(DDoS)攻击,再到新颖的钓鱼攻击和勒索软件,金融服务业已成为遭遇网络犯罪威胁最严重的行业之一。金融服务业的重要性不言而喻&#xff0…
最新文章