题目描述:

输入一棵二叉树,判断该二叉树是否是平衡二叉树

题解:递归
 /*最直接的做法,遍历每个结点,借助一个获取树深度的递归函数,根据该结点的左右子树高度差判断是否平衡,然后递归地对左右子树进行判断。
 */
 public classSolution {
     public boolean IsBalanced_Solution(TreeNode root) {
         if(root == null) {
             return true;
         }
         return Math.abs(maxDepth(root.left) - maxDepth(root.right)) <= 1 &&
             IsBalanced_Solution(root.left) && IsBalanced_Solution(root.right);
     }

     private int maxDepth(TreeNode root) {
         if(root == null) {
             return 0;
         }
         return 1 + Math.max(maxDepth(root.left), maxDepth(root.right));
     }
 }
 /*这种做法有很明显的问题,在判断上层结点的时候,会多次重复遍历下层结点,增加了不必要的开销。如果改为从下往上遍历,如果子树是平衡二叉树,则返回子树的高度;如果发现子树不是平衡二叉树,则直接停止遍历,这样至多只对每个结点访问一次。
 */
 public class Solution {
     public boolean IsBalanced_Solution(TreeNode root) {
         return getDepth(root) != -1;
     }
     private int getDepth(TreeNode root) {
         if (root == null) return 0;
         int left = getDepth(root.left);
         if (left == -1) return -1;
         int right = getDepth(root.right);
         if (right == -1) return -1;
         return Math.abs(left - right) > 1 ? -1 : 1 + Math.max(left, right);
     }
 }

【剑指Offer】39:平衡二叉树的更多相关文章

  1. 剑指Offer 39. 平衡二叉树 (二叉树)

    题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树. 题目地址 https://www.nowcoder.com/practice/8b3b95850edb4115918ecebdf1b4d222 ...

  2. [剑指Offer] 39.平衡二叉树

    题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树. class Solution { public: int Get_Height(TreeNode* root) { if(root == NU ...

  3. 剑指 Offer 39. 数组中出现次数超过一半的数字 + 摩尔投票法

    剑指 Offer 39. 数组中出现次数超过一半的数字 Offer_39 题目描述 方法一:使用map存储数字出现的次数 public class Offer_39 { public int majo ...

  4. 剑指 Offer 39. 数组中出现次数超过一半的数字

    剑指 Offer 39. 数组中出现次数超过一半的数字 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字. 你可以假设数组是非空的,并且给定的数组总是存在多数元素. 示例 1: 输入: [ ...

  5. 力扣 - 剑指 Offer 39. 数组中出现次数超过一半的数字

    题目 剑指 Offer 39. 数组中出现次数超过一半的数字 思路1(排序) 因为题目说一定会存在超过数组长度一半的一个数字,所以我们将数组排序后,位于length/2位置的一定是众数 代码 clas ...

  6. 【Java】 剑指offer(55-2) 平衡二叉树

      本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 输入一棵二叉树的根结点,判断该树是不是平衡二叉树.如果某二叉树 ...

  7. Go语言实现:【剑指offer】平衡二叉树

    该题目来源于牛客网<剑指offer>专题. 给定一个二叉树,判断它是否是高度平衡的二叉树. 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1. ...

  8. 《剑指offer》平衡二叉树

    本题来自<剑指offer> 反转链表 题目: 思路: C++ Code: Python Code: 总结:

  9. 【Java】 剑指offer(39) 数组中出现次数超过一半的数字

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如 ...

  10. 剑指offer 39. 是否为平衡二叉树

    39. 是否为平衡二叉树 题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树 任意结点的左右子树高度差不大于1就是平衡二叉树. C++解法 class Solution { public: boo ...

随机推荐

  1. mysql 使用 limit ,从指定条数读取完,-1失效

    , 原因很简单这种写法本身就是错的,虽然它可以在之前的版本中运行(低优先级),新版本的mysql对此做出了修复,现在的替代方法是第二个参数用一个较大的正数代替 比如你写个 , 感觉这方法很蠢,然鹅我并 ...

  2. VMware使用与安装

    VMware安装 下载完Vmware -> 双击打开安装包 -> 选择下一步(如下图界面) 选择接受协议,点击下一步 选择经典进行安装.这个是默认安装,会把默认插件安装到相对应的路径 选择 ...

  3. MySQL的JDBC驱动(8.0版本)

    1.引用外部库  mysql-connector-java-8.0.版本的jar 2.jdbc驱动类:com.mysql.jdbc.Driver  改成 com.mysql.cj.jdbc.Drive ...

  4. Spring Bean 在容器的生命周期是什么样的?

    Spring Bean 的初始化流程如下: 实例化 Bean 对象 Spring 容器根据配置中的 Bean Definition(定义)中实例化 Bean 对象. Bean Definition 可 ...

  5. oracle快速创建用户、imp/exp导入导出dmp文件

    1.首先我们可以用管理员用户以sysdba的身份登录oracle sqlplus username/password as sysdba 2.然后我就可以来创建用户了. create user use ...

  6. JAVA面向对象 - 抽象类、接口

    抽象类 用abstract关键字来修饰一个类时,这个类就叫抽象类,用abstract关键字来修饰一个方式时,这个方法就是抽象方法.当一个类继承的父类是抽象类的话,需要我们把抽象类中的所有抽象方法全部实 ...

  7. 题解【CF1311F Moving Points】

    \[ \texttt{Preface} \] 赛时,把 " 任意时刻 " 理解成 " 整数时刻 " 了,看起来一脸不可做的亚子,还各种推式子. 话说我为什么觉得 ...

  8. js获取时间及转化

    有关Javascript的本地时间获取,下面我直接用代码来进行举例吧 let time = new Date(); let month = time.getMonth()+1; //获取的月份0~11 ...

  9. Spring Boot源码(五):BeanFactoryPostProcessor和BeanPostProcessor

    BeanFactoryPostProcessor是spring BeanFactory加载Bean后调用, BeanPostProcessor是Bean初始化前后调用. BeanFactoryPost ...

  10. Kemaswill 机器学习 数据挖掘 推荐系统 Python optparser模块简介

      Python optparser模块简介