数据结构-判断平衡二叉树(java)

2023-11-04

判断平衡二叉树
题目(力扣110题):
在这里插入图片描述在这里插入图片描述

解题思路
1,首先理解平衡二叉树的定义,使用Map存储每个节点的高度
2,求得当前节点的左右子树高度,若Map中左右子树高度已经求过,直接取得,若没有,通过递归计算高度并存入Map中
3,左右子树高度差>1,则不是平衡二叉树

代码实现

 public boolean isBalanced(TreeNode root) {
        if(root == null){
            return true;
        }
        // 使用Map存储每个出现节点的高度
        // 求当前的左右子树高度
        Map<TreeNode,Integer> map = new HashMap<>();
        int left = 0;
        int right = 0;
        if(map.containsKey(root.left)){
            //root.left高度已经计算过,直接取得
            left = map.get(root.left);;
        }else{
            //通过递归计算高度并存入map中
            left = Height(root.left);
            map.put(root.left,left);
        }
        if(map.containsKey(root.right)){
            //root.right高度已经计算过,直接取得
            right = map.get(root.right);;
        }else{
            //通过递归计算高度并存入map中
            right = Height(root.right);
            map.put(root.right,right);
        }
        int ret = Math.abs(left - right);
        if(ret > 1){
            return false;
        }
        return isBalanced(root.left) && isBalanced(root.right);
    }
    public int Height(TreeNode root) {
        if(root == null){
            return 0;
        }
        return 1 + Math.max(Height(root.left),Height(root.right));
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据结构-判断平衡二叉树(java) 的相关文章

随机推荐

  • 从p文件到m文件,快速将Matlab p代码转换成m文件

    你是否遇到过这样的问题 发现自己写的Matlab代码根本无法加密 或者别人发给你的MATLAB代码无法打开或运行 如果是这样 那么你需要一款强有力的Matlab解密工具 左左Matlab解密助手 左左解密助手是一款功能强大的Matlab解密
  • 状态机模型

    参考 什么是状态机 用C语言实现进程5状态模型 参考 设计模式 一目了然的状态机图 案例 状态模式 C语言实现 MP3播放 暂停案例 STM32按键消抖 入门状态机思维 常用的while循环内switch case形式 实现状态机的状态跳转
  • java自动化测试语言基础之正则表达式

    java自动化测试语言基础之正则表达式 文章目录 java自动化测试语言基础之正则表达式 Java 正则表达式 Java 正则表达式 正则表达式定义了字符串的模式 正则表达式可以用来搜索 编辑或处理文本 正则表达式并不仅限于某一种语言 但是
  • 树莓派 OCR识别 2-2:chineseocr_lite 部署

    chineseocr lite github项目地址 https github com ouyanghuiyu chineseocr lite 超轻量级中文ocr 支持竖排文字识别 支持ncnn推理 dbnet 1 8M crnn 2 5M
  • JAVA 获取某段时间内的所有日期集合

    集合里包含月份 开始 结束 2019 01 01 00 00 00 2019 01 31 23 59 00 2019 02 01 00 00 00 2019 02 28 23 59 00 2019 03 01 00 00 00 2019 0
  • 社区生鲜团购小程序

    摘 要 随着生活质量的提高 人们对生鲜购物体验的要求逐步升级 传统生鲜物流成本相对较高 生鲜产品品质控制困难 在新零售背景下的社区生鲜团购模式拥有经营成本低 用户黏性高等优点 互联网与实体店相结合带来了更多的便利和机会 自微信推出以来 就迅
  • 39. 组合总和 40. 组合总和 II

    39 组合总和 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target 找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 并以列表形式返回 你可以按 任意顺序 返回这些组合
  • Java文档注释用法+JavaDoc的使用详解

    Java文档注释 JavaDoc的使用详解 简介 文档注释负责描述类 接口 方法 构造器 成员属性 可以被JDK提供的工具 javadoc 所解析 自动生成一套以网页文件形式体现该程序说明文档的注释 注意 文档注释必须写在类 接口 方法 构
  • spring boot中使用@requestbody注解接收不到值是什么鬼

    首先 先科普一下这个注解的用法吧 requestbody一般是用于put或post请求时 在controller处接收前端发送的值 通过适当的HttpMessageConverter转换为JAVA类 而前端在发送值的时候必须指定数据是jso
  • “泰迪杯”超市Spark数据处理和数据分析项目实战Dataframe

    数据和代码 2019 年 泰迪杯 数据分析职业技能大赛 超市销售数据分析 一 背景 近年来 随着新零售业的快速发展 消费者购买商品时有了更多的对比和 选择 导致超市行业的竞争日益激烈 利润空间不断压缩 超市的经营管理产 生了大量数据 对这些
  • WINDOWS下使用redi并安装成系统服务开机启动

    WINDOWS下使用redis 下载redis源码 解压使用 将redis安装成window系统服务 不显示黑窗口 下载redis源码 linux下的redis可以再redis官网上找到Statble版本并下载 但是window版本在官网上
  • 实践练习三(可选):使用OBD 部署一个 三副本OceanBase 集群(离线安装)

    部署规划 这次作业是OceanBase 集群三节点部署方法 通过中控机直接远程登录到 OceanBase 节点上部署启动 observer 和 obproxy 进程 由于手上正好有7台物理机 所以在这个作业中会使用OBD直接部署为2 2 2
  • PAT甲级2023夏季考试题解(A-1 Trap,A-2 Queue Using Two Stacks,A-3 Rank of Binary Tree,A-4 Big Number)

    很幸运得到了一个满分 最后一题真的是连蒙带猜的AC的 当AC的那瞬间 可以用喜极而泣来形容了 去年十二月也参加了一次甲级 但是才考到89分 不是很满意 因此这次又去参加了一次 但总算得到了一点收获 也算对自己的一点安慰吧 A 1 Trap
  • 基于MATLAB的字母识别系统

    一 算法步骤 1 测试图像预处理及连通区域提取 2 样本库的建立采集feature 3 选择算法输入测试图像进行测试 二 识别过程 源码 1 连通区域提取分割 在原图的基础上进行了膨胀 腐蚀 膨胀的操作使截取的图像更加接近字母 提取数字的边
  • 微信小程序组件、web-view、h5之间交互

    目录结构 component index page index js index wcss index wxml index json pages index index wcss index wxml index js index jso
  • 设置VS编译选项使程序不需要带DLL在任意Windows系统上正常运行

    背景 初学编程的时候 那时使用的开发环境是VC6 0 使用VC6 0编译的控制台程序或者是DLL 直接编译出来就可以在其他平台上运行或是调用 不需要额外加载运行库DLL等等 使用VC6 0编译出来的MFC程序 编译的时候设置下在静态库中使用
  • vue2和vue3组件传值——父传子

    近期学习vue3的组件传值 发现和之前的vue2版本并没有什么区别 实现的思路都是一样的 文章底部我会用大白话叙述一下vue组件传值的思路过程 下面就一起学习vue的组件传值吧 不足之处大家多批评指正 vue2 父传子
  • [Sqlite] Java使用jdbc连接Sqlite数据库进行各种数据操作的详细过程

    前言 SQLite是遵守ACID 的关系型数据库管理系统 它包含在一个相对小的C库中 它是D RichardHipp建立的公有领域项目 不像常见的客户 服务器范例 SQLite引擎不是个程序与之通信的独立进程 而是连接到程序中成为它的一个主
  • 程序员的思考方式

    思考方式及状态进入 工作产出不是由写代码的效率决定的 一些不恰当的工作方法很大程度影响着你的产出 首先要问自己三个问题 我现在是一个什么水平 我想达到什么水平 我将怎样达到那个目标 这三个问题实际上是帮我们确定 现状 目标 实现路径 如果一
  • 数据结构-判断平衡二叉树(java)

    判断平衡二叉树 题目 力扣110题 解题思路 1 首先理解平衡二叉树的定义 使用Map存储每个节点的高度 2 求得当前节点的左右子树高度 若Map中左右子树高度已经求过 直接取得 若没有 通过递归计算高度并存入Map中 3 左右子树高度差