【LeetCode】对称二叉树 平衡二叉树

news2024/10/2 14:21:37

 对称二叉树

即先判断根节点的左右子树相不相同,相同时,再判断左孩子的左子树和右孩子的右子树比较,左孩子的右子树和右孩子的左子树(当两个都相同时才是对称的).....依次递推,过程中并设置一些不满足相同的条件。

 算法代码

class Solution {
    public boolean isSymmetric(TreeNode root) {
        if(root == null) return true; //由于此题至少有一个根节点,可写可不写
        return isSymmetricChild(root.left,root.right);
    }

    public static boolean isSymmetricChild(TreeNode leftTree,TreeNode rightTree){
        if(leftTree==null && rightTree==null) return true;  //两个都为空
        if(leftTree!=null && rightTree==null || leftTree==null && rightTree!=null) return false; //一个为空一个不为空
        if(leftTree.val != rightTree.val) return false;  //值不相同
       
        /*
        boolean left = isduicheng(leftTree.left,rightTree.right);
        boolean right = isduicheng(leftTree.right,rightTree.left);
        return left&&right;
        */

        return isSymmetricChild(leftTree.left,rightTree.right) && isSymmetricChild(leftTree.right,rightTree.left);//和上面注释的作用一样

    }
}

 

 平衡二叉树

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

该题的实质还是求树的高度,只要你会写求树的高度的函数代码,那基本上就没问题了,由于我们在求树的高度的时候,是从最下面往上不断的返回当前子树的左右子树高度的最大值+1,最终得到根节点的高度,也就是该树的高度。那么我们可以对求数的高度的函数进行一些改变,当每次求得当前子根节点的左右子树的高度时,进行绝对值求差值,差值小于等于1,则说明当前子根是平衡的,,接着遍历。若差值大于1,说明当前子根已经不平衡了,就不用在往下遍历了,可节省一定的时间消耗。

 

 

算法代码

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

    public static int getHeight(TreeNode root){  //求树的高度的函数
        if(root == null) return 0;
        int leftHeight = getHeight(root.left);
        int rightHeight = getHeight(root.right);

        if(leftHeight<0 || rightHeight<0) return -1; 
        if(Math.abs(leftHeight-rightHeight)>1) return -1; //说明树不平衡了

        return leftHeight>rightHeight?leftHeight+1:rightHeight+1; //返回当前根的最大深度即高度

    }
}

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

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

相关文章

虚拟机重启网络服务失败 Failed to start LSB:Bring up/down networking.

许久没有打开虚拟机了&#xff0c;今天一开打发现无法ping通网络 使用 ip addr 也获取不到ip信息 重启网络服务提示我 使用 systemctl status network.service 命令查看 出现以下报错 百度各种解决方案无效&#xff0c;才发现我为了加快电脑开机速度&#xff0c;把虚拟机的一些…

c++学习(智能指针)[29]

RALL RALL&#xff08;Resource Acquisition Is Initialization&#xff09;是一种 C 的编程技术&#xff0c;用于管理资源的获取和释放。它的基本思想是在对象的构造函数中获取资源&#xff0c;在对象的析构函数中释放资源&#xff0c;从而确保资源的正确获取和释放。 RALL 的…

实时数据监测与三维可视化:数字孪生技术引领工业互联网发展

随着工业互联网的快速发展&#xff0c;数字孪生技术作为其中的重要组成部分&#xff0c;正逐渐引起广泛关注。数字孪生是将实体世界的实时数据与数字模型相结合&#xff0c;形成实体与数字世界的虚拟镜像&#xff0c;为工业互联网带来了前所未有的效率和质量提升。 首先&#x…

【多模态】ALBEF-融合前对齐

目录 &#x1f341;&#x1f341;背景 &#x1f337;&#x1f337;网络结构 &#x1f385;&#x1f385;损失函数 &#x1f33c;&#x1f33c;动量蒸馏 &#x1f33a;&#x1f33a;下游任务结果 &#x1f4d2;&#x1f4d2;Grad-CAM 特征可视化 &#x1f6a6;&#x1f6a…

快速文件传输常见问题

我们所处的世界充斥着各种信息&#xff0c;能够迅速获得正确的数据往往是企业成功的关键因素。将文件从A点移动到B点需要考虑很多问题&#xff0c;但是当涉及需要在最短时间内送达全球各地收件人的大型关键任务文件时&#xff0c;就不能再使用Dropbox和 Google Drive 等方案了。…

flutter:二维码生成与读取

前言 这csdn真的是服了&#xff0c;图片里有个二维码就直接变成违规图片了。至于效果的话&#xff0c;自己运行一下看看吧。 生成 flutter中生成二维码可以使用 qr_flutter。 官方文档 https://pub-web.flutter-io.cn/packages/qr_flutter 安装 flutter pub add qr_flutt…

Dockerfile构建mysql

使用dockerfile构建mysql详细教学加案例 Dockerfile 文件 # 使用官方5.6版本&#xff0c;latest为默认版本 FROM mysql:5.6 #复制my.cof至容器内 ADD my.cnf /etc/mysql/my.cof #设置环境变量 密码 ENV MYSQL_ROOT_PASSWORD123456my.cof 文件 [mysqld] character-set-server…

【chrome扩展开发】vue-i18n使用问题及解决方案

记录chrome扩展开发时调用vue-i18n的一些问题和解决方法 环境 vue: ^3.3.4vue-i18n: ^9.2.2vite: ^4.4.8 错误1 Uncaught (in promise) EvalError: Refused to evaluate a string as JavaScript because unsafe-eval is not an allowed source of script in the following Con…

07 Ubuntu中使用poetry工具管理python环境——巨详细!!!

由于conda和ros2的环境实在太容易冲突了。我真的不敢再使用conda&#xff0c;着实是有些搞不明白这解释器之间的关系。 conda的卸载和ros2的安装暂不赘述&#xff0c;下面着重来说如何在Ubuntu中使用poetry进行包管理及遇到的问题。 1 安装poetry 由于在有写入权限的限制&am…

uniapp 返回上一页并刷新

如要刷新的是mine页面 在/pages/mine/improveInfo页面修改信息&#xff0c;点击保存后跳转到个人中心&#xff08;/pages/mine/index&#xff09;页面并刷新更新数据 点击保存按钮时执行以下代码&#xff1a; wx.switchTab({url: /pages/mine/index }) // 页面重载 let pages …

JConsole-的使用

文章目录 一、简介二、使用2.1 启动 JConsole2.2 连接到 Java 进程2.2.1 本地连接2.2.2 远程连接 2.3 监控 JVM 资源 一、简介 JConsole 是一种 Java 监控和管理控制台工具&#xff0c;可以用于监视 Java 虚拟机&#xff08;JVM&#xff09;的性能和资源利用情况。它提供了一种…

汉字姓名转拼音

import osimport pandas as pdfrom xpinyin import Pinyindownpath/Users/Kangyongqing/Downloads/ file1教师姓名转拼音.xlsxdtpd.read_excel(downpathfile1) print(dt.info()) dt[pinyin]dt[教师姓名].apply(lambda x:Pinyin().get_pinyin(x).split(-)[0].capitalize() .join…

antd select multiple模式 Dropdown onClick 失效

背景&#xff1a;当 Ant Design 的下拉菜单&#xff08;Dropdown&#xff09;在默认情况下从下方弹出&#xff0c;在某些情况下可能会因为页面空间不足而自动切换到上方弹出。这种位置变动可能导致点击事件无法触发。 复现描述&#xff1a;当输入搜索时&#xff0c;option会筛…

几乎与人类无异,机器人手通过触摸感知物体

原创 | 文 BFT机器人 人类即使在看不清物体的情况下也能够毫不费力的感知抓取物体&#xff0c;受到这一启发&#xff0c;加州大学圣迭戈分校工程师领导的研究小组开发出了一种新方法&#xff0c;使机械手能够不依赖视觉&#xff0c;仅通过触摸就能感知旋转物体。 利用他们的技…

什么是OCR?OCR技术详解

光学字符识别(Optical Character Recognition)简称为“OCR”。ORC是指对包含文本资料的图像文件进行分析识别处理&#xff0c;获取文字及版面信息的技术。 一般包括以下几个过程&#xff1a; 1.图像输入 针对不同格式的图像&#xff0c;有着不同的存储格式和压缩方式。目前&…

HTML,url,unicode编码

目录标题 HTML实体编码urlcode编码unicode编码小结基础例题高级例题 HTML实体编码 实体表示&#xff1a; 以&符号开始&#xff0c;后面跟着一个预定义的实体的名称&#xff0c;或是一个#符号以及字符的十进制数字。 例&#xff1a; <p>hello</p> <!-- 等同…

【Python】PySpark 数据计算 ⑤ ( RDD#sortBy方法 - 排序 RDD 中的元素 )

文章目录 一、RDD#sortBy 方法1、RDD#sortBy 语法简介2、RDD#sortBy 传入的函数参数分析 二、代码示例 - RDD#sortBy 示例1、需求分析2、代码示例3、执行结果 一、RDD#sortBy 方法 1、RDD#sortBy 语法简介 RDD#sortBy 方法 用于 按照 指定的 键 对 RDD 中的元素进行排序 , 该方…

pp-ocr报错记录

RESER 报错&#xff1a; distutils.errors.DistutilsError: Could not find suitable distribution for Requirement.parse(‘tomli>1.0.0’) 解决办法&#xff1a; 参考&#xff1a;https://stackoverflow.com/questions/67603407/distutilserror-could-not-find-suitable…

golang函数传参——值传递理解

做了五年的go开发&#xff0c;却并没有什么成长&#xff0c;都停留在了业务层面了。一直以为golang中函数传参&#xff0c;如果传的是引用类型&#xff0c;则是以引用传递&#xff0c;造成这样的误解&#xff0c;实在也不能怪我。我们来看一个例子&#xff0c;众所周知&#xf…

享元模式 Flyweight Pattern 《游戏编程模式》学习笔记

如果我们要存储一个树一样的数据结构&#xff0c;直觉来说我们会这么写 但是实际上我们会发现&#xff0c;哪怕森林里有千千万万的树&#xff0c;它们大多数长得一模一样。 它们使用了相同的网格和纹理。 这意味着这些树的实例的大部分字段是一样的。 那么我们就可以将树共…