刷题专栏(八):平衡二叉树

简介: 刷题专栏(八):平衡二叉树

前言

最近要和二叉树死磕到底了,必须把二叉树相关数据结构的题目全做完才行。

今天的这一道《平衡二叉树》,虽然和昨天的那一道有序数组转平衡二叉树的题目不一样,但是本质上的结构是一样的。

昨天的那道题是转换为平衡的二叉树,今天的这道题是提供一个二叉树让你判断是不是平衡的二叉树。

image.png

算法题:平衡二叉树

昨天我们处理的那一道转换平衡二叉树,是根据二分法和递归来处理的,那这一道题又怎么解决呢?

按照之前总结的规律,逢二叉树,基本都会用到递归;那么看一下这道题是不是也要用递归呢?

看来是要用的,因为要查询到所有的分支才行。

那么二叉树怎么才能算作是平衡二叉树呢?那自然是左右分支的层数一样,或者是差值为一的才能算作是平衡二叉树。

这个时候就面临一个选择,是从根节点开始一层一层的递归遍历,最后得到结果。

还有就是从最底层节点开始往根节点算起,这个时候中间可能已经判断出结果来了,就可以提前终止调递归循环。

代码展示

我们这里采用了从底层节点到根部节点的检索方式,代码如下所示:

public boolean isBalanced(TreeNode root) {
    return a(root) >= 0;
}
public int a(TreeNode root) {
    if (root == null) {
        return 0;
    }
    int leftHeight = a(root.left);
    int rightHeight = a(root.right);
    if (leftHeight == -1 || rightHeight == -1 || Math.abs(leftHeight - rightHeight) > 1) {
        return -1;
    } else {
        return Math.max(leftHeight, rightHeight) + 1;
    }
}

执行结果:

结果不是很理想,大家可以尝试其他方式。

image.png

总结

今天是二叉树的第三道题了,明天我们接着看二叉树,欢迎大家关注刷题专栏。

目录
相关文章
|
Java 应用服务中间件
SpringBoot集成使用jsp(超详细)
SpringBoot集成使用jsp(超详细)
SpringBoot集成使用jsp(超详细)
|
安全 UED 开发者
鸿蒙开发:沉浸式效果实现
沉浸式效果实现后,一定要注意安全区域的内容避让,防止内容延伸后被导航条或者状态栏遮挡,具体是选择安全区域或者窗口管理方式,按照需求进行处理,如果仅仅是某个页面,直接安全区域即可。
422 0
鸿蒙开发:沉浸式效果实现
|
存储 对象存储 索引
对象存储OSS-m3u8视频私有权限
当上传至私有存储桶的M3U8视频缺少签名信息时,会导致播放失败(403错误)。解决方案是使用OSS的动态签名机制,在首次访问M3U8文件时,通过在URL中添加`x-oss-process=hls/sign`参数,OSS将自动对所有TS切片地址进行签名,确保视频正常播放。
1058 2
|
存储 JavaScript 前端开发
js的map和set |21
js的map和set |21
|
机器学习/深度学习 算法
基于贝叶斯优化CNN-LSTM混合神经网络预测(Matlab代码实现)
基于贝叶斯优化CNN-LSTM混合神经网络预测(Matlab代码实现)
501 0
|
SQL 关系型数据库 Linux
Winsows Server 2019 安装 PostgreSQL
环境准备 windows server 2019 镜像文件,官网地址 =》Windows Server 2019 | Microsoft postgresql 12.x for windows,官网地址=》PostgreSQL: The world's most advanced open source database 准备一个满足以上条件的服务器;(物理机,VM 均可)以上环境中安装 windows server 2019 的环节省略,...
654 0
Winsows Server 2019 安装 PostgreSQL
|
Java 应用服务中间件 调度
LNMT的多机部署和双机热备
LNMT的多机部署和双机热备
219 0
|
数据安全/隐私保护 Python
python自动化系列之提取pdf文字和图片
python自动化系列之提取pdf文字和图片
1268 0
python自动化系列之提取pdf文字和图片

热门文章

最新文章