当前位置: 首页 > news >正文

LeetCode-110. 平衡二叉树

目录

    • 题目分析
    • 递归法
    • 题外话

题目来源
110. 平衡二叉树

题目分析

平很二叉树:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。
二叉树节点的深度和二叉树节点的高度
在这里插入图片描述

递归法

递归三步曲

  • 1.明确递归函数的参数和返回值

参数:当前传入节点。
返回值:以当前传入节点为根节点的树的高度。
那么如何标记左右子树是否差值大于1呢?
如果当前传入节点为根节点的二叉树已经不是二叉平衡树了,还返回高度的话就没有意义了。
所以如果已经不是二叉平衡树了,可以返回-1 来标记已经不符合平衡树的规则了。
代码如下:

int getHeight(TreeNode root)
  • 2.明确终止条件

递归的过程中依然是遇到空节点了为终止,返回0,表示当前节点为根节点的树高度为0
代码如下:

        if(root == null){return 0;}
  • 3.明确单层递归的逻辑

如何判断以当前传入节点为根节点的二叉树是否是平衡二叉树呢?当然是其左子树高度和其右子树高度的差值。
分别求出其左右子树的高度,然后如果差值小于等于1,则返回当前二叉树的高度,否则返回-1,表示已经不是二叉平衡树了。
代码如下:

        int leftHeight = getHeight(root.left);   //左if(leftHeight == -1){return -1;}int rightHeight = getHeight(root.right);   //右if(leftHeight == -1){return -1;}int result;if(Math.abs(leftHeight-rightHeight)>1){        //中return -1;}else{result = Math.max(leftHeight,rightHeight)+1;}return result;

整体递归代码如下:

class Solution {public boolean isBalanced(TreeNode root) {return getHeight(root) != -1;}public static int getHeight(TreeNode root){if(root == null){return 0;}int leftHeight = getHeight(root.left);   //左if(leftHeight == -1){return -1;}int rightHeight = getHeight(root.right);   //右if(rightHeight == -1){return -1;}int result;if(Math.abs(leftHeight-rightHeight)>1){        //中return -1;}else{result = Math.max(leftHeight,rightHeight)+1;}return result;}
}

在这里插入图片描述

题外话

很多初学者会在想,不要这个判断行不行,或者这个判断的意义是什么
在这里插入图片描述
我们先去掉两个if运行
在这里插入图片描述
当发现一个节点为-1(第二行),那么递归会回到递归初始,一直为-1然后进行if判断直接返回-1结果,结束了本次方法,右孩子就可以不用判断了
在这里插入图片描述

http://www.lryc.cn/news/4728.html

相关文章:

  • Python蓝桥杯训练:基本数据结构 [链表]
  • 华为OD机试 - 找字符(Python)| 真题+思路+代码
  • 使用继承与派生的6大要点
  • 加一-力扣66-java高效方案
  • 记一次 .NET 某游戏网站 CPU爆高分析
  • 集群使用——资源管理和租户创建
  • 谷歌浏览器登录失败,提示【无法同步到“...@gmail.com”】
  • 75 111111
  • 分销系统逻辑
  • MySQL视图特性
  • RabbitMQ详解(二):Docker安装RabbitMQ
  • 如何使用代码注释:关于JavaScript与TypeScript 注释和文档的自动生成
  • Echarts 设置面积区域图(areaStyle核心)
  • pandas——字符串处理【建议收藏】
  • 反射,枚举,lambda表达式
  • .Net Core对于RabbitMQ封装分布式事件总线
  • GPIO功能描述
  • 指派问题与匈牙利法讲解
  • day5——冒泡排序,选择排序和插入排序的学习
  • Windows 数据类型 (Windows Data Types)
  • 九龙证券|本周5只新股申购,特斯拉、蔚来、理想的供应商来A股了!
  • 设计模式(持续更新)
  • Prometheus 告警规则
  • mulesoft MCIA 破釜沉舟备考 2023.02.13.02
  • 获取DLL运行时路径的方法
  • “华为杯”研究生数学建模竞赛2006年-【华为杯】D题:学生面试中教师安排的优化与算法(附获奖论文)
  • 【JavaScript】复习 【对象参数】【函数参数】
  • 如何批量提取文件名到excel表格?
  • CUDA线程层次一文搞懂|参加CUDA线上训练营
  • Linux文件默认权限:umask