首页 > 其他分享 >力扣110 判断是否是平衡二叉树

力扣110 判断是否是平衡二叉树

时间:2023-01-02 21:14:09浏览次数:42  
标签:Info 是否是 height 力扣 二叉树 平衡 public 110

力扣110 判断是否是平衡二叉树

题目:

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

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

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

示例 1:

img

输入:root = [3,9,20,null,null,15,7]
输出:true

示例 2:

img

输入:root = [1,2,2,3,3,null,null,4,4]
输出:false

示例 3:

输入:root = []
输出:true

提示:

  • 树中的节点数在范围 [0, 5000]
  • -104 <= Node.val <= 104

解题思路:

要判断一棵二叉树是否是一颗平衡二叉树我们就要判断这颗二叉树的每颗子树的高度差的绝对值要小于2,我们可以定义一个类Info这个类的信息包含它是否是平衡二叉树以及树的高度,递归的判断左子树与右子树然后再根据左子树与右子树的Info信息来判断这棵树是否是平衡二叉树。

代码:

/**
 * 判断一棵树是否是平衡二叉树
 * 平衡二叉树:每颗子树以及整颗树的左右子树的高度差不大于1
 */
public class IsBalancedTree {
    //1.首先定义一个二叉树的节点类型的类
    public static class TreeNode{
        public int value;
        public TreeNode left;
        public TreeNode right;

        public TreeNode(int value) {
            this.value = value;
        }
    }

    //2.再定义一个类这个类包括的信息是:是否是平衡二叉树以及这颗树的高度
    public static class Info{
        public boolean isBalancedTree;
        public int height;

        public Info(boolean isBalancedTree, int height) {
            this.isBalancedTree = isBalancedTree;
            this.height = height;
        }
    }

    //3.定义一个方法用来获取是否是平衡以及树的高度的信息
    public static Info process(TreeNode root){
        //4.1如果根节点为空那么默认为它就是一颗平衡二叉树
        if (root == null) {
            return new Info(true,0);
        }
        //4.2获得左子树的Info信息以及右子树的Info信息
        Info leftInfo = process(root.left);
        Info rightInfo = process(root.right);
        //4.3获得整棵树的高度 左子树与右子树谁的高度高 高的再加1就是整棵树的高度
        int height = Math.max(leftInfo.height, rightInfo.height) + 1;
        //4.4判断是否是平衡二叉树 要是平衡二叉树则左子树是平衡二叉树右子树也是平衡二叉树且左右子树的高度差的绝对值小于2
        boolean isBalanced = leftInfo.isBalancedTree && rightInfo.isBalancedTree
                && Math.abs(leftInfo.height - rightInfo.height) < 2;
        return new Info(isBalanced,height);
    }

    //4.定义一个方法判断是否是平衡的
    public static boolean isBalanced(TreeNode root){
        return process(root).isBalancedTree;
    }
}

标签:Info,是否是,height,力扣,二叉树,平衡,public,110
From: https://www.cnblogs.com/ygstudy/p/17019994.html

相关文章

  • leetcode-617. 合并二叉树
    617.合并二叉树-力扣(Leetcode)递归合并二叉树easy/***Definitionforabinarytreenode.*typeTreeNodestruct{*Valint*Left*TreeNode*......
  • 力扣107 二叉树的层序遍历
    力扣107二叉树的层序遍历题目:给你二叉树的根节点root,返回其节点值自底向上的层序遍历。(即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)示例1:输入:root......
  • 14.平衡二叉树(AVL树)
    左旋转思想:当右子树的高度比左子树的高度高时(并且高度差绝对值超过了1时)代码示例:packagecn.com.avlTree;/***平衡二叉树*/publicclassAvlTreeDemo{......
  • 力扣239 滑动窗口最大值
    题目:给你一个整数数组nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的k 个数字。滑动窗口每次只向右移动一位。返回......
  • leetcode-606. 根据二叉树创建字符串
    606.根据二叉树创建字符串-力扣(Leetcode)前序遍历/***Definitionforabinarytreenode.*typeTreeNodestruct{*Valint*Left*TreeNode*......
  • 力扣105 根据先序遍历以及中序遍历构建二叉树
    力扣105根据先序遍历以及中序遍历构建二叉树题目:给定两个整数数组preorder和inorder,其中preorder是二叉树的先序遍历,inorder是同一棵树的中序遍历,请构造二叉树......
  • 力扣104 求二叉树的最大深度
    力扣104求二叉树的最大深度题目:给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明:叶子节点是指没有子节点的节点。示......
  • 力扣101 对称树
    力扣101对称树题目:给你一个二叉树的根节点root,检查它是否轴对称。示例1:输入:root=[1,2,2,3,4,4,3]输出:true示例2:输入:root=[1,2,2,null,3,null,3]输出:f......
  • 力扣150 逆波兰表达式求值
    题目:给你一个字符串数组tokens,表示一个根据 逆波兰表示法表示的算术表达式。请你计算该表达式。返回一个表示表达式值的整数。注意:有效的算符为'+'、'-'、'*......
  • BM27 按之字形顺序打印二叉树
    题目描述思路分析这题在上一道层序遍历的基础上会更加方便。我们之前就可以得到每一层的数据,此时只是对每一层的遍历顺序做相应的处理即可注意:1.我们在向tempQueue......