leetcode刷题日记:110. Balanced Binary Tree(平衡二叉树)

题目给了我们一个二叉树要让我们来判断这一个二叉树是不是平衡二叉树。
要想判断一棵树是不是平衡二叉树,我们得首先知道平衡二叉树的定义是什么,平衡二叉树指的是这样的树它的左子树的高度与右子树高度的差的绝对值不能超过1,而且它的左子树是一颗平衡二叉树,它的右子树也是一颗平衡二叉树。画出图示如下:
在这里插入图片描述
我们可以看出这一个二叉树的左子树是高度为3的一棵树,右子树为高度为1的一颗子树,所以这不是一颗平衡二叉树。
在这里插入图片描述
上面这一颗树虽然根结点的左右子树的高度相差0,但是其右子树不是平衡二叉树,所以这一颗树仍然不是平衡二叉树。
相信看到这了,你一定有所感觉,也就是说我们判断一颗二叉树不仅要知道该二叉树的左子树与右子树的高度差,还要求出左子树是否为二叉树右子树是否为平衡二叉树。我们要先知道左子树与右子树是否为平衡二叉树才能知道整棵树是否为平衡二叉树。而子树仍然是一颗二叉树,所以判断二叉树是否为平衡二叉树的方法仍然可以使用,这就涉及到了递归的问题。
那么递归的终止条件是什么?因为叶子结点的指针域为空,没有孩子了,当访问到为空的指针域时就该终止递归了,此时访问到的空指针域可以看作根结点为空的二叉树,该二叉树的高度为0,显然空二叉树是平衡二叉树。这样我们就知道了当访问到 r o o t = = N U L L root==NULL root==NULL时应该返回该子树高度为0,是平衡二叉树。
那么非终止条件下则应该返回什么呢?非终止条件下,该结点的高度应为两颗子树中高度较大的加1,这就是该子树的高度,知道子树的高度之后,我们还需要根据其左右子树的高度差判断这一项是否符合平衡二叉树的条件,所以我们要求出 − 1 ≤ 左子树高度 − 右子树高度 ≤ 1 -1\leq 左子树高度-右子树高度\leq 1 1左子树高度右子树高度1同时还要知道其左子树是否为平衡二叉树,右子树是否为平衡二叉树,
将上述命题符号化:
q : − 1 ≤ 左子树高度 − 右子树高度 ≤ 1 p : 左子树为平衡二叉树 s : 右子树为平衡二叉树 q:-1\leq 左子树高度-右子树高度\leq 1\\ p:左子树为平衡二叉树\\ s:右子树为平衡二叉树\\ q:1左子树高度右子树高度1p:左子树为平衡二叉树s:右子树为平衡二叉树
当这三项都满足时此树才为平衡二叉树,所以返回的应该是 p ∧ q ∧ s p\land q\land s pqs
有了上面的思路我们可以写出下面的代码:

bool isBalance(struct TreeNode * root, int *depth){
    int *left = (int *)malloc(sizeof(int));
    int *right = (int *)malloc(sizeof(int));
    bool l, r;
    if(root==NULL){
        (*depth) = 0;
        return true;
    }
    l = isBalance(root->left, left);
    r = isBalance(root->right, right);
    *depth = (*left)>(*right)?(*left):(*right);
    *depth = (*depth) + 1;
    int x = (*left)-*right;
    if(x>=-1&&x<=1){
        return true && l && r;
    }
    return false && l && r;
}
bool isBalanced(struct TreeNode* root) {
    int depth = 0;
    return isBalance(root, &depth);
}

运行结果如下:
在这里插入图片描述

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

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

相关文章

酷柚易汛ERP-客户管理操作指南

1、应用场景 对客户信息进行管理&#xff0c;可新增客户、设置客户等级、联系人信息、银行账户和销售人员等信息&#xff0c;方便开单时自动匹配销售信息。 2、主要操作 2.1 新增客户 打开【资料】-【客户管理】&#xff0c;点击【新增】。 在页面输入客户信息、联系人地址…

Servlet作业小练习

一.题目 利用JavaBean实现用户类&#xff0c;包含姓名、性别、爱好&#xff0c;爱好需要用多选框 实现表单1进行获取数据&#xff0c;表单2显示获取结果。 利用Servlet实现逻辑代码 二.实现效果 三.具体实现 1.User实体类 package com.hjj.pojo;/*** author:嘉佳 Date:20…

Auto-Encoder学习笔记

写在前面 本篇博客是本人在学习李宏毅老师的《机器学习》课程中的Auto-Encoder时&#xff0c;记录的相关笔记&#xff0c;由于只记录了我认为相对重要的部分&#xff0c;所以可能有未记录的部分。博客中的图片来自于教学视频中的截图&#xff0c;视频资源地址为&#xff1a;传…

【面试经典150 | 位运算】位1的个数

文章目录 写在前面Tag题目来源题目解读解题思路方法一&#xff1a;循环检查二进制位方法二&#xff1a;位运算优化方法三&#xff1a;__builtin_popcount() 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…

基于SSM的汽车租赁系统业务管理子系统设计实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

SQL必知会(二)-SQL查询篇(7)-使用函数处理数据

第8课、使用函数处理数据 表8-1 DBMS 函数的差异 函数语法提取字符串的组成DB2、Oracle、PostgreSQL 和 SQLite 使用 SUBSTR()&#xff1b;MariaDB、Mysql 和 SQL Server 使用 SUBSTRING()数据类型转换Oracle 使用多个函数&#xff0c;每种类型的转换有一个函数&#xff1b;D…

在ubuntu sudo apt-get update 更新报错

sudo apt-get update 更新报错 解决办法&#xff1a; 用你自己的key 根据上图自己找 sudo gpg --keyserver keyserver.ubuntu.com --recv-keys **********运行完成有一个ok 见下图 运行命令&#xff0c;中间的还是上面的key复制下来即可 sudo gpg --export --armor **********…

开源跨平台绘图软件draw.io Mac/Win免费下载:让创意无限飞

你是否曾经遇到过在创作时&#xff0c;因为缺乏合适的绘图工具而无法充分表达你的想法&#xff1f;或者在团队项目中&#xff0c;因为沟通障碍而无法有效地进行视觉呈现&#xff1f;现在&#xff0c;让我们一起探索一个全新的开源跨平台绘图软件 - draw.io。 draw.io是一款完全…

logistic回归 目的、方程、损失函数

logistic回归多用于二分类问题。 文章目录 目的&#xff1a;给出x&#xff0c;当x满足条件时&#xff0c;y1的概率是多少。方程&#xff1a; y ^ σ ( ω T x b ) \hat y \sigma(\omega^Txb) y^​σ(ωTxb)损失函数&#xff1a; J ( ω , b ) 1 m ∑ i 1 m L ( y ^ ( i ) …

本地编译安装 Minkowski Engine 报错 Cuda 版本 与 Pytorch 版本不匹配

编译 Cuda 版本 C 插件 Cuda 版本 与 Pytorch 版本不匹配解决方案 报错详情环境报错分析 报错详情 RuntimeError: The detected CUDA version (12.2) mismatches the version that was used to compile PyTorch (11.8). Please make sure to use the same CUDA versions.环境 …

环境变量小节

这是写的第二篇环境变量博客&#xff0c;写了一年多了&#xff0c;第一次出现把自己博客删了的情况&#xff0c;不知道为什么明明发表了&#xff0c;然后就把草稿箱和回收站的删了&#xff0c;结果晚上发现没发表&#xff0c;回收站删除是无法找回的&#xff0c;以后还是要慎重…

git基础知识

1.git的必要配置 所有的配置文件&#xff0c;其实都保存在本地&#xff01; 查看所有配置 git config -l 即把 系统配置(system)和当前用户&#xff08;global&#xff09;配置都 列出来 以直接编辑配置文件&#xff0c;通过命令设置后会响应到这里。 注意&#xff1a; 如果…

传统测试将被取代?AI测试现状及发展之思

近年来&#xff0c;我一直关注AI相关的测试&#xff0c;并积极参与多个全国性测试社区和社群。在这些社区中&#xff0c;我与不同公司和领域的测试专家交流探讨AI测试相关话题&#xff0c;包括业界顶尖公司的专家和国内知名测试学者。我也参加了多个大会&#xff0c;聆听了许多…

B087-人力资源项目-文件上传课程分类

目录 背景控制台操作开通OSS服务创建存储空间 项目工程准备概述新建文件管理模块把文件上传到OSS的三种方案 通过官方文档完成demo上传官方文档找JavaSDK文件上传思路代码 背景 为什么要交给第三方文件管理服务管理&#xff1f; 最传统的的文件管理方案是把文件存储到项目中本…

半小时拥有自己的ChatGPT4,高效低成本,无脑跟即可

文章目录 一、获取Key二、获取服务器三、设置端口三、安装Docker环境 一、获取Key 最简单的获取方法&#xff0c;去某宝搜 “open账号ai” 购入一个key&#xff0c;几块钱&#xff0c;有3.5、4.0&#xff0c;买3.5就行了&#xff0c;4.0太贵了。注意是购入key&#xff0c;不是…

Elasticsearch 和 Go 中使用向量搜索寻找地鼠

作者&#xff1a;CARLY RICHMOND&#xff0c;LAURENT SAINT-FLIX 就像动物和编程语言一样&#xff0c;搜索也经历了不同实践的演变&#xff0c;很难在其中做出选择。 加入我们的第二部分&#xff0c;通过 Elasticsearch 中的矢量搜索在 Go 中狩猎地鼠&#xff08;gophers&…

Install Docker in Linux

Docker官网链接: https://docs.docker.com/ 1.确定Linux版本 新版本的Docker对Linux系统版本有一定的要求。如果Linux的发行版系统是centOS&#xff0c;安装最新版的docker需要centOS 7以上的系统。 在Docker安装帮助页面查看支持的系统版本。 Docker帮助页面:https://docs…

13 套接字Socket

1、Socket 编程 socket编程基于 TCP 和 UDP 协议的tcp和udp是区分客户端和服务端的&#xff0c;所以我们的socket编程也是区分的。 2、socket是端到端的通信 1.Socket 这个名字很有意思&#xff0c;可以作插口或者插槽讲 2.一头插在客户端&#xff0c;一头插在服务端&#x…

拉晶工艺设备——切片机

单晶炉拉出硅棒后&#xff0c;经硅棒切断、外园整形&#xff0c;便用切片机切成薄片&#xff0c;供后续工艺使用。切片机也用于玻璃、陶瓷、 大理石、花岗岩等硬脆材料的切割。 半导体行业使用的切片机按结构形式可分为立式切片机、卧式切片机&#xff0c;按刀片形式可分内圆切…

魔众文库系统 v5.5.0 批量快捷上传,文档图标优化,档转换逻辑优化

魔众文库系统基于文档系统知识&#xff0c;建立平台与领域&#xff0c;打造流量、用户、付费和变现的闭环&#xff0c;帮助您更好的搭建文库系统。 魔众文库系统发布v5.5.0版本&#xff0c;新功能和Bug修复累计14项&#xff0c;批量快捷上传&#xff0c;文档图标优化&#xff…