博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode算法题-Balanced Binary Tree(Java实现)
阅读量:6985 次
发布时间:2019-06-27

本文共 1195 字,大约阅读时间需要 3 分钟。

这是悦乐书的第167次更新,第169篇原创

01 看题和准备

今天介绍的是LeetCode算法题中Easy级别的第26题(顺位题号是110)。给定二叉树,判断它是否是高度平衡的。对于此问题,高度平衡二叉树定义为:一个二叉树,其中每个节点的两个子树的深度从不相差超过1。例如:

给定以下树[3,9,20,null,null,15,7]:

3      /   \     9    20    / \  15   7

返回true。

给定以下树[1,2,2,3,3,null,null,4,4]:

1         / \        2   2       / \      3   3     / \    4   4

返回false。

本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。

02 解题

在昨天的那道题里,我们介绍了平衡树的概念,今天这道题也和平衡树有关,要判断一个二叉树是否为一颗平衡树,我们需要计算从根节点开始的左右子树的深度。

之前有道题是求二叉树的最长路径,如果没有印象的话可以找找历史文章。对于此题,可以借鉴那道题的思路,但是稍微有点不同,在拿到左子树和右子树的深度后,我们还要做下判断,看是否相差大于1,这一步在返回最后的深度前。

特殊情况:当二叉树为空时,他也是一颗平衡树。

public boolean isBalanced(TreeNode root) {    if (root == null) {        return true;    }    int dep = getDeepth(root);    return dep >= 0;}public int getDeepth(TreeNode t){    if (t == null) {        return 0;    }    int left = getDeepth(t.left);    int right = getDeepth(t.right);    if (left == -1 || right == -1 || Math.abs(left-right)>1) {        return -1;    }    return 1+Math.max(left, right);}

如果left和right两数之差大于1,则返回-1,那么剩下没有遍历到的节点有可能等于-1,因此在前面还需要判断下left和right是否等于-1。

03 小结

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

转载于:https://www.cnblogs.com/xiaochuan94/p/9942751.html

你可能感兴趣的文章
gweb总结之router
查看>>
【跃迁之路】【478天】刻意练习系列237(2018.05.29)
查看>>
Windows改Linux(一),新建Ubuntu虚拟机小白向导
查看>>
写了一个下拉刷新插件
查看>>
【Laravel】Laravel 框架关键技术解析·读书笔记(二)
查看>>
HTML5调用手机前置摄像头或后置摄像头拍照,canvas显示,经过Android测试
查看>>
如何做好 Android 端音视频测试?
查看>>
element 源码学习(番外篇) —— SASS五分钟快速入门
查看>>
五个非常实用的机器学习资源
查看>>
关于一个插图的翻译
查看>>
Spring Cloud构建微服务架构:分布式服务跟踪(入门)【Dalston版】
查看>>
spring 5 webclient使用指南
查看>>
理论积累1
查看>>
【355天】跃迁之路——程序员高效学习方法论探索系列(实验阶段113-2018.01.26)...
查看>>
spring security filter获取请求的urlpattern
查看>>
Nodejs alpine 基础docker镜像构建
查看>>
网页性能分析不完全指南
查看>>
简要记录下IDEA进行远程调试
查看>>
阿里云即将全球首发云骨干网
查看>>
Nginx 安装部署
查看>>