【LeetCode刷题记录】简单篇-110-平衡二叉树

news2024/12/23 18:36:41

【题目描述】

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


【测试用例】

示例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则称该树为平衡二叉树。在这道题中,首先,空树一定是平衡二叉树,单独处理。然后,对于非空树,需要判断其左右子树的深度,这里仍然使用递归的思想,用一个countHigh函数来计算深度,通过传入root->left和root->right来分别计算左右子树的深度left和right,如果left和right等于-1,则表示树失衡,返回-1,否则返回left和right中较大的一个值+1(+1是因为这里返回是返回给上层递归,加的1表示上一层)。


【参考代码】

C实现

#include <stdio.h>

//easy-110-平衡二叉树
int count(struct TreeNode* root);
bool isBalanced(struct TreeNode* root);

struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
}; 

int countHigh(struct TreeNode* root){
	if(NULL == root){
		return 0;
	}
	int left = countHigh(root->left);
	if(left == -1){
		return -1;
	}
	int right = countHigh(root->right);
	if(right == -1){
		return -1;
	}
	if(abs(left - right) > 1){
		return -1;
	}else{
		return left > right ? left + 1 : right + 1;
	}
}

bool isBalanced(struct TreeNode* root) {
    return countHigh(root)==-1 ? false : true;
}

C++实现

#include <iostream>
using namespace std;

//easy-110-平衡二叉树
struct TreeNode {
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode() : val(0), left(nullptr), right(nullptr) {}
    TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
    TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
};

class Solution {
public:
	int countHigh(TreeNode* root);
    bool isBalanced(TreeNode* root);
};

int Solution::countHigh(TreeNode* root){
	if(NULL == root){
		return 0;
	}
	int left = countHigh(root->left);
	if(left == -1){
		return -1;
	}
	int right = countHigh(root->right);
	if(right == -1){
		return -1;
	}
	if(abs(left - right) > 1){
		return -1;
	}else{
		return max(left, right) + 1;
	}
}

bool Solution::isBalanced(TreeNode* root){
	return countHigh(root)==-1 ? false : true;
} 

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

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

相关文章

基于Vue3与ElementUI Plus酷企秀可视化设计器中的创新应用

一、引言 随着科技的快速发展&#xff0c;前端技术已经从简单的网页呈现进化到了复杂的数据可视化、互动体验和跨平台应用的构建。酷企秀可视化设计器作为一个集成了多种前端技术的创新平台&#xff0c;不仅为企业提供了全方位的数字化展示解决方案&#xff0c;还在多个行业领…

新产品Spiff来啦!Salesforce将最新收购加入Sales Cloud!

Salesforce在过去一年中一直处于收购间歇期&#xff0c;但这并没有妨碍Salesforce在2023年底收购了Spiff。Spiff是新型激励薪酬管理(Incentive Compensation Management&#xff0c;ICM) 软件提供商 &#xff0c;是AppExchange合作伙伴&#xff0c;结合直观的低代码UI、熟悉的电…

车载测试系列:车载测试Bug定位与分析

车载Bug定位 1.1 模拟复现条件 能够复现bug才能对问题进行定位、解决以及验证。找到bug存在的特定的条件&#xff0c;进行重现。对于依赖外部输入的条件&#xff0c;如果条件比较复杂难以模拟可以在程序里预设直接进入对应状态。 1.2 打印Log 根据问题的现象&#xff0c;在…

配置完串口,用了printf函数,LCD屏不显示了

配置完串口后&#xff0c;记得打开微库&#xff01; /* USER CODE BEGIN PFP */u8 rx[2];u8 rx_buff[10];int fputc(int c, FILE* s){u8 ch[1] {c};HAL_UART_Transmit(&huart1,ch, 1, 0xfff);return c; } /* USER CODE END PFP */

springboot3+springsecurity+redis 整合登录认证以及权限校验

1. 架构说明 整体架构如下(提供的对应的模块引入)&#xff0c;围绕着springsecurity中的三大核心展开&#xff1a; ​ 1、Authentication&#xff1a;存储了认证信息&#xff0c;代表当前登录用户 ​ 2、SeucirtyContext&#xff1a;上下文对象&#xff0c;用来获取Authenti…

爬虫学习--5.xpath数据解析

xpath是XML路径语言&#xff0c;它可以用来确定xml文档中的元素位置&#xff0c;通过元素路径来完成对元素的查找。HTML就是XML的一种实现方式&#xff0c;所以xpath是一种非常强大的定位方式。 基本概念 XPath&#xff08;XML Path Language&#xff09;是一种XML的查询语言…

计算机网络-----总结UDP的报文结构

UDP报文结构 UDP报文结构: 有报头和载荷组成 源端口: 发送端的端口号 目的端口: 接收端的端口号 数据报长度 : UDP报文的数据长度 包括报头和载荷 校验和: 检测UDP报文在传输过程中是否损坏, 用于数据完整性校验 说明: UDP报头一共八个字节 因此, 每个部分(源端口, 目的端…

sql Server2015安装——参考的教程

1.sql Server安装包来自&#xff1a;https://mp.weixin.qq.com/s/Pe_YbWw_MgwjzzZhQWIYfA 2.需要的替换文件和补丁&#xff1a;https://blog.csdn.net/Auspicious_air/article/details/108315154 https://blog.csdn.net/m0_60477996/article/details/126748477 3.安装manger…

php开发-个人博客项目文件操作类编辑器上传下载删除读写

特地整了个软件 这就舒服了 文件操作类的开发 文件的任意上传&#xff0c;下载&#xff0c;读取&#xff0c;删除操作等 1.文件上传类-任意文件上传 分为三类 1&#xff0c;代码自主编写的 先写一个html的上传表单&#xff0c;这个网上搜索就有 标题看着不够明确啊&#…

php168 6.0.1变量覆盖

php168 6.0.1变量覆盖 -》 远程代码执行漏洞 前言:敢说全网最详细是因为我做一半我做不下去了&#xff0c;我心态做崩溃了&#xff0c;然后上网找漏洞成因&#xff0c;我找不到&#xff0c;然后又搞了好久&#xff0c;真的心态崩了&#xff0c;到最后灰盒测试的时候我可能PHP版…

【论文阅读】Spectral–Spatial Attention Network for Hyperspectral Image Classification

Spectral–Spatial Attention Network for Hyperspectral Image Classification 论文地址摘要&#xff1a;1. 简介1.1.动机1.2.贡献 2. 相关作品2.1.双向递归网络RNN2.2.CNN2.3. Attention Mechanism 3. 方法3.1 Attention with RNN for Spectral Classification3.2&#xff0e…

【转载】数字化工厂规划蓝图报告

制造业进入到全新的数字化时代&#xff0c;需要构建新型智能工厂、数字化工厂与智能车间以助力传统产业智能制造升级&#xff0c;将新一代信息技术贯穿到设计、工艺、生产、物流等各个环节。目的是完善创新体系、提升产品质量、推行绿色制造、增强核心竞争力、发展现代化客户体…

4月功能更新 | 知识库新增微信分享图配置,丰富模板一键应用

4月HelpLook带来了更多知识库模板资源&#xff0c;直观的文章版本对比和微信分享图配置等功能&#xff0c;更多功能更新等你往下挖...... 目录 知识库管理功能升级 1. 知识库的全局替换支持替换标题2. 知识库支持配置微信分享图3. 知识库链接支持生成二维码和下载4. 后台站点栏…

计算机中GPU快不行的几个标志,看下有没有你遇到的

GPU是处理图形密集型任务的主要组件。尽管它非常耐用,但它最终会磨损并开始失效。在到达生命的终结之前,它通常会显示出即将发生故障的迹象,需要及时修复或更换。本指南详细介绍了这些标志。 在我们开始之前 在深入研究GPU故障的迹象之前,重要的是要承认,下面提到的一些…

来!给我讲讲分库分表!

你好面试官&#xff0c;在我的理解中分库分表分为四个类型&#xff0c;垂直分表、垂直分库、水平分表、水平分库。接下来我会对这几个名词谈谈我的理解&#xff0c;具体如下&#xff1a; 垂直分表 1&#xff09;简单来说就是将原本的一张表切割成多张表。举个例子&#xff1a…

身份证OCR识别接口如何对接

身份证OCR识别接口又叫身份证识别API接口、身份证正反面文字识别接口&#xff0c;指的是传入身份证照片&#xff0c;精准识别静态身份证图像上的文字信息&#xff0c;如果传的是正面照片只返回正面信息&#xff0c;如果传的是反面只返回反面信息。那么身份证OCR识别接口如何对接…

SD-WAN助力企业实现多分支互联

随着企业规模的扩大和业务的多样化&#xff0c;多分支互联已成为许多行业不可或缺的网络架构。SD-WAN&#xff08;软件定义广域网&#xff09;作为一种创新的网络解决方案&#xff0c;以其独特的优势&#xff0c;正在助力企业实现更高效、智能和安全的多分支互联。 一、SD-WAN的…

应用层协议之 DNS 协议

DNS 就是一个域名解析系统。域名就是网址&#xff0c;类似于 www.baidu.com。网络上的服务器想要访问它&#xff0c;就得需要它对应的 IP 地址&#xff0c;同时&#xff0c;每个域名对对应着一个 / N个 IP 地址&#xff08;即对应多台服务器&#xff09;。 因此&#xff0c;为了…

解决uniapp软键盘弹起导致页面fixed定位元素被顶上去

在移动端开发中通常导航栏需要固定在页面的最顶端&#xff0c;但当页面中有输入框且dom元素较多时&#xff0c;点击输入框弹出软键盘会促使导航栏往上移 正常情况如图一所示&#xff0c;软键盘弹起如图二所示 图一 图二 解决办法 1&#xff09;给输入框添加 :adjust-position…

本地搭建hydra服务用go以验证oidc流程

目录 1、docker搭建hydra&#xff0c;环境配置&#xff1a; 2、搭建完成后服务调用&#xff1a; 2.1保证服务正常启动&#xff1a; 2.2 通过postman调用&#xff0c;获取client_id&#xff1a; 2.3 通过client_id&#xff0c;实现oauth2/auth调用 3. 通过go语言实现oidc验…