剑指offer——JZ79 判断是不是平衡二叉树 解题思路与具体代码【C++】

news2024/11/27 14:50:21

一、题目描述与要求

判断是不是平衡二叉树_牛客题霸_牛客网 (nowcoder.com)

题目描述

输入一棵节点数为 n 二叉树,判断该二叉树是否是平衡二叉树。

在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树

平衡二叉树(Balanced Binary Tree),具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。

样例解释:

样例二叉树如图,为一颗平衡二叉树

注:我们约定空树是平衡二叉树。

数据范围:n≤100,树上节点的val值满足 0≤n≤1000

要求:空间复杂度O(1),时间复杂度 O(n)

输入描述:

输入一棵二叉树的根节点

返回值描述:

输出一个布尔类型的值

示例

示例1:

输入:{1,2,3,4,5,6,7}

返回值:true

示例2:

输入:{}

返回值:true


二、解题思路

根据题目描述,我们需要去判断所给的二叉树是否为平衡二叉树;

平衡二叉树的性质为——它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。

因而我们只需要去求出以每个结点为根结点时它的左右子树的深度,然后做减法,所有结点的左右子树结点深度差的绝对值不超过1,就代表只是一颗平衡二叉树,反之不是。

首先判断是否为一颗空树,是的话返回true;

递归求出左子树与右子树分别的深度,并进行判断;此外还要判断其左右子树是否也是一颗平衡二叉树。


三、具体代码

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param pRoot TreeNode类 
     * @return bool布尔型
     */
    int depth(TreeNode* pRoot){
        if(pRoot==nullptr) return 0;
        int left=depth(pRoot->left);
        int right=depth(pRoot->right);
        return (left>right)?left+1:right+1;
    }
    bool IsBalanced_Solution(TreeNode* pRoot) {
        //空树为平衡二叉树
        if(pRoot==nullptr)  return true;
        int left=depth(pRoot->left);
        int right=depth(pRoot->right);
        if(left-right>1||left-right<-1){
            return false;
        }
        return IsBalanced_Solution(pRoot->left)&&IsBalanced_Solution(pRoot->right);
    }
};

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

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

相关文章

【Java 进阶篇】深入了解HTML表单标签

HTML&#xff08;Hypertext Markup Language&#xff09;表单标签是网页开发中的重要组成部分&#xff0c;用于创建各种交互式元素&#xff0c;允许用户输入、提交和处理数据。本文将深入探讨HTML表单标签&#xff0c;包括如何创建表单、各种输入元素、表单属性以及一些最佳实践…

C++学习day2

作业&#xff1a; 1> 思维导图 2>自己封装一个矩形类(Rect)&#xff0c;拥有私有属性:宽度(width)、高度(height)&#xff0c; 定义公有成员函数: 初始化函数:void init(int w, int h) 更改宽度的函数:set_w(int w) 更改高度的函数:set_h(int h) 输出该矩形的周长和…

jenkins工具系列 —— 插件 使用Changelog获取commit记录

文章目录 安装changelog插件重启jenkins配置 ChangelogExecute shell 使用 changelog邮件中html格式也可以使用构建测试&#xff08;查看构建项 -> 控制台输出&#xff09; 安装changelog插件 插件文件可通过 V 获取 点击 左侧的 Manage Jenkins —> Plugins ——> …

Docker安装——Ubuntu (Jammy 22.04)

一、为什么要用 Ubuntu&#xff1f;(centos和ubuntu有什么区别&#xff09; 使用lsb_release命令&#xff1a;lsb_release -a &#xff0c;即可查看ubantu的版本&#xff0c;但是为什么要使用ubantu 呢&#xff1f; 区别&#xff1a;1、centos基于EHEL开发&#xff0c;而ubunt…

2023年10月8日

三盏灯流水 .text .global _start _start: 1.设置GPIOE寄存器的时钟使能 RCC_MP_AHB4ENSETR[5:4]->1 0x50000a28 LDR R0,0X50000A28 LDR R1,[R0] 从r0为起始地址的4字节数据取出放在R1 ORR R1,R1,#(0x3<<4) 第4位设置为1 STR R1,[R0] 写回2.设置PE10管脚为…

SketchyCOCO数据集进行前景图像、背景图像和全景图像的分类

SketchyCOCO数据集进行前景图像、背景图像和全景图像的分类 import os import shutildef CopyFile(src, dst, filename):if not os.path.exists(dst):os.makedirs(dst)print(create dir: dst)try:shutil.copy(src\\filename, dst\\filename)except Exception as e:print(cop…

经典算法-----农夫过河问题(深度优先搜索)

目录 前言 农夫过河问题 1.问题描述 2.解决思路 位置编码 获取位置 判断是否安全 深度优先遍历&#xff08;核心算法&#xff09; 3.完整代码 前言 今天我们来解决一个有意思的问题&#xff0c;也就是农夫过河问题&#xff0c;可能这个问题我们小时候上学就听说过类似的…

分布式缓存-Redis集群

单点Redis的问题 数据丢失问题 Redis是内存存储&#xff0c;服务重启可能会丢失数据 并发能力问题 单节点Redis并发能力虽然不错&#xff0c;但也无法满足如618这样的高并发场景 故障恢复问题 如果Redis宕机&#xff0c;则服务不可用&#xff0c;需要一种自动的故障恢复手段…

机器学习|深度学习|重磅推出---全网最全Numpy简明教程(一)

本教程面向初学者的Numpy简明教程&#xff0c;学好Numpy才能在深度学习、机器学习、AI等领域进军&#xff0c;如果感觉此文不错&#xff0c;欢迎和博主交流探讨 文章目录 1、Numpy介绍2、创建ndarray数组2.1、np.array2.2、np.ones2.3、np.zeros2.4、np.full2.5、np.eye2.6、np…

ChatGPT私有数据结合有什么效果?它难吗?

ChatGPT的出现可谓是惊艳了全世界&#xff0c;ChatGPT的问答能力通过了图灵测试&#xff0c;使其回答问题的方式与人类几乎无法区分。大家不甘于只在官方的对话页面问答&#xff0c;想利用 GPT 模型的自然语言能力结合私有数据开拓更多的应用场景。 | ChatGPT私有数据结合特点 …

ARM:使用汇编完成三个灯流水亮灭

1.汇编源代码 .text .global _start _start: 设置GPIOF寄存器的时钟使能LDR R0,0X50000A28LDR R1,[R0]ORR R1,R1,#(0x1<<5)STR R1,[R0]设置GPIOE寄存器的时钟使能LDR R0,0X50000A28LDR R1,[R0] 从r0为起始地址的4字节数据取出放在R1ORR R1,R1,#(0x1<<4) 第4位设…

day24-JS进阶(构造函数,new实例化,原型对象,对象原型,原型继承,原型链)

目录 构造函数 深入对象 创建对象三种方式 构造函数 new实例化执行过程(important!) 实例成员&静态成员 实例对象&实例成员 静态成员 内置构造函数 基本包装类型 Object Object.keys(obj)返回所有键组成的字符串数组 Object.values(obj)返回所有值组成的字…

C# 替换字符串最后一个逗号为分号

使用场景&#xff0c;sql语句的insert into table(c1,c2,c3) values (v1,v2,v3),(v1,v2,v3),(v1,v2,v3), 为了提高执行效率&#xff0c;在一个insert into中执行时&#xff0c;在循环中拼接语句&#xff0c;最后一个逗号需要替换为分号才能执行。 public static string Replace…

采集软件在市场营销中的应用价值

随着互联网的发展&#xff0c;市场竞争愈发激烈&#xff0c;如何获取准确、全面的市场信息成为企业成功的关键。数据利器作为一款强大的市场营销助手软件&#xff0c;具备多项功能&#xff0c;帮助您实现精准营销&#xff0c;发现商机。 软件功能&#xff1a; 搜索引擎采集&…

docker:修改容器的共享内存大小

错误提示&#xff1a; RuntimeError: DataLoader worker (pid 83709) is killed by signal: Bus error. It is possible that dataloader’s workers are out of shared memory. Please try to raise your shared memory limit. 解决办法&#xff1a; 1&#xff1a;创建新容器…

docker虚拟网桥和业务网段冲突处理

ifconfig查看docker虚拟网桥ip地址 docker inspect --format{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}} $(docker ps -aq)查询所有容器的ip 修改docker-compose networks networks xxx-network: driver: bridge ipam: c…

web应用常见的其他漏洞总结

1.暴力破解用户名和密码 admin:admin, test:test, weblogic:weblogic, root:passwd 2. 扫敏感目录及备份文件 以ation 为扩展名的文件&#xff0c;通过7kb和k8&#xff0c;破壳扫描&#xff0c;扫描出来一个Web.rar文件&#xff0c;可获取MSSQL SSA连接用户名密码,通过测试…

2.6 宽带接入技术

思维导图&#xff1a; 前言&#xff1a; 我的理解&#xff1a; 1. **早期互联网接入技术的局限性**&#xff1a; - 作者首先回顾了早期用户通过电话线和调制解调器连接到互联网服务提供商&#xff08;ISP&#xff09;的方式&#xff0c;指出这种方式的速度上限是56 kbit/…

顺序表的简单介绍

目录 前提须知&#xff1a; 数据结构&#xff1a; 什么是数据结构&#xff1f; 数据结构特点&#xff1a; 为什么需要数据结构&#xff1a; 顺序表&#xff1a; 线性表&#xff1a; 与数组区别&#xff1a; 静态顺序表与动态顺序表&#xff1a; 二者之间的区别&#x…

应用安全系列之四十:登录常见问题以及预防方法

对于所有系统而言,登录是一个必备的而且最重要的功能。随着系统越来越复杂,服务越来越多,为了方便用户使用系统的服务,SSO应运而生,SSO虽然方便了用户使用系统,也增加了风险。因为一旦登录出现问题,就很容易通过登录访问整个系统。可见,对于登录如果没有控制好,攻击者…