首页 > 编程语言 >平衡二叉树(java版)

平衡二叉树(java版)

时间:2022-12-12 21:57:53浏览次数:52  
标签:right TreeNode val int 二叉树 java 平衡 root

题目描述:

标签:树 深度优先搜索 递归

给定一个二叉树,判断它是否是高度平衡的二叉树。

本题中,一棵高度平衡二叉树定义为:

一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。

代码:

思路分析:思路其实同二叉树的最大深度。

1、递归结束的条件是,当根节点为null时,返回0。

2、求左子树高度和右子树高度,这里需要处理的是两种情况:

①如果左子树或右子树有不平衡,则会返回-1

②如果左子树和右子树平衡,则会返回左子树和右子树中较大的高度+1
————————————————

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public boolean isBalanced(TreeNode root) {
        return height(root)>=0;
    }
 
    public int height(TreeNode root){
        if(root == null){
            return 0;
        }
        int leftHeight = height(root.left);
        int rightHeight = height(root.right);
        if(leftHeight == -1 || rightHeight == -1 || Math.abs(leftHeight-rightHeight) > 1){
            return -1;
        }else{
            return Math.max(leftHeight,rightHeight) + 1;
        }
    }
}

 

标签:right,TreeNode,val,int,二叉树,java,平衡,root
From: https://www.cnblogs.com/shoshana-kong/p/16977201.html

相关文章

  • JAVA 单例模式 饿汉和懒汉
    单例模式特点:①单例类只能有一个实例②私有构造方法,不允许通过其他类创建单例类的实例③提供静态get方法返回单实例饿汉式:类加载的时候就创建实例懒汉式:类加载时不创建......
  • Java实现LRU算法
    文章目录1、内存空间有限,当缓存满的时候,如何淘汰缓存?2、实现LRUdemo使用Java容器LinkedHashMap哈希表(HashMap)+双向链表 1、内存空间有限,当缓存满的时候,如何淘汰缓......
  • day35_0106.从中序与后序遍历序列构造二叉树0105. 前序+中序构造二叉树
    0106.从中序与后序遍历序列构造二叉树前序+中序构造二叉树[106中序+后序构造二叉树]做过简答题但没编过代码以下均是复制粘贴递归代码的思路----三部曲......
  • Java实现二叉树的先序、中序、后序、层序遍历(递归+非递归方法),附带自己深入浅出的讲解
     二叉树(Binarytree)是树形结构的一个重要类型,也一种非常重要的数据结构,更是算法题中高频出现的知识点,不管是为了应付工作还是面试,都有必要深度学习一下。二叉树有多种遍......
  • 【数据结构-树】二叉树的相关算法
    目录1计算二叉树中双分支结点的个数2交换二叉树中所有左右子树3求先序遍历第k个元素4删去值为x的子树5计算二叉树的带权路径长度(WPL)6将表达式树转化为等价的中缀......
  • java学习笔记--java介绍,一些基本知识,面向对象的理解
    <1>Java介绍1)Java的特点简单易学    是c和c++的变种,而且摒弃了其中容易引起程序错误的地方,比如结构体,内存回收等。提供了丰富的类库。完全面向对象。安全性高......
  • JavaScript奇淫技巧:用密码保护你的照片
    JavaScript奇淫技巧:密码保护的私密图片JavaScript奇淫技巧:图片压缩、图片加密本文将用JavaScript实现两个颇有技术含量的功能:图片压缩、图片加密。最终效果:可实现将任意图片......
  • 小新学Java18-【函数式接口】
    一、函数式接口1.1概念1.2格式1.3@FunctionalInterface注解@FunctionalInterface注解作用:可以检测接口是否是一个函数式接口是:编译成功否:编......
  • 剑指offer 序列化二叉树
    题目描述请实现两个函数,分别用来序列化和反序列化二叉树 二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可......
  • 剑指offer 对称的二叉树(思维)
    题目描述请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。解题思路:正规的解法是传入两个节点,然后判断它们是不......