LeetCode算法题-Balanced Binary Tree(Java实现)
这是悦乐书的第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 小结
以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!
LeetCode算法题-Balanced Binary Tree(Java实现)的更多相关文章
- LeetCode算法题-Invert Binary Tree
		这是悦乐书的第194次更新,第199篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第55题(顺位题号是226).反转二叉树.例如: 输入: 4 / \ 2 7 / \ / ... 
- LeetCode算法题-Add Binary(Java实现)
		这是悦乐书的第157次更新,第159篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第16题(顺位题号是67).给定两个二进制字符串,返回它们的总和(也是二进制字符串).输 ... 
- LeetCode算法题-Count Binary Substrings(Java实现)
		这是悦乐书的第293次更新,第311篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第161题(顺位题号是696).给定一个字符串s,计算具有相同数字0和1的非空且连续子串 ... 
- LeetCode算法题-Construct Quad Tree(Java实现)
		这是悦乐书的第224次更新,第237篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第91题(顺位题号是427).我们想使用四叉树来存储N×N布尔网格.网格中的每个单元格只 ... 
- LeetCode 110. 平衡二叉树(Balanced Binary Tree) 15
		110. 平衡二叉树 110. Balanced Binary Tree 题目描述 给定一个二叉树,判断它是否是高度平衡的二叉树. 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点的左右两个子树 ... 
- Leetcode 笔记 110 - Balanced Binary Tree
		题目链接:Balanced Binary Tree | LeetCode OJ Given a binary tree, determine if it is height-balanced. For ... 
- LeetCode算法题-Rotate String(Java实现)
		这是悦乐书的第317次更新,第338篇原创 在开始今天的算法题前,说几句,今天是世界读书日,推荐两本书给大家,<终身成长>和<禅与摩托车维修艺术>,值得好好阅读和反复阅读. 0 ... 
- LeetCode算法题-Rotated Digits(Java实现)
		这是悦乐书的第316次更新,第337篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第185题(顺位题号是788).如果一个数字经过180度旋转后,变成了一个与原数字不同的 ... 
- LeetCode算法题-Toeplitz Matrix(Java实现)
		这是悦乐书的第312次更新,第333篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第181题(顺位题号是766).如果从左上角到右下角的每个对角线具有相同的元素,则矩阵是 ... 
随机推荐
- 18.Class 的基本语法
			Class 的基本语法 Class 的基本语法 简介 JavaScript 语言中,生成实例对象的传统方法是通过构造函数.下面是一个例子. function Point(x, y) { this.x ... 
- Java并发(一)—— 使用多线程
			Java的线程机制是抢占式的,所谓的抢占式指的是每一个线程都会被分配一个指定大小的时间片,一旦这个时间片用完,就会通过上下文切换到另一个线程上去. 并发是主要是为了提高单处理器的性能.创建一个线程会有 ... 
- Tomcat日志设定
			1 Tomcat 日志概述 Tomcat 日志信息分 为 两 类 : 一.是运行中的日志,它主要 记录 运行的一些信息,尤其是一些异常 错误 日志信息 .二.是 访问 日志信息,它 记录 的 访 ... 
- 开源的api文档管理系统
			api文档 php 在项目中,需要协同开发,所以会写许多API文档给其他同事,以前都是写一个简单的TXT文本或Word文档,口口相传,这种方式比较老土了,所以,需要有个api管理系统专门来管理这些ap ... 
- [android] 利用广播实现ip拨号
			广播接收者,broadcast receiver,安卓系统在使用时会产生很多的事件,比如:短信到来,电量低,拨打电话等等 界面布局,线性布局,EditText指定为电话号码,设置属性android:i ... 
- mysql使用存储过程&函数实现批量插入
			写这边文章的目的,是想结合mysql 存储过程+函数完成一个批量删除的功能吧...正好也好加深下对procedure和function的熟练操作吧...废话不多说,我就直接上表结构啦哈,如下: cre ... 
- canvas-a13prototype.html
			<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ... 
- 淘宝cnpm
			npm install -g cnpm --registry=https://registry.npm.taobao.org 
- ajaxJson(常用)
			function ajaxJson(method, url, data, callback) { var options = { type: method, url: url, dataType: ' ... 
- elementUI  vue 页面加载的时候页面出现了黑字  页面优化处理  按钮弹出框文字
			elementUI 页面如果需要加载很多东西的时候, 自己定义的按钮或者弹出框dialog的文字就会显示在页面上, 一闪而过, 因此需要优化一下, elementUI 提供的loading有遮罩层, ... 
