leetcode110. 平衡二叉树

问题描述:

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

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

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

示例 1:

给定二叉树 3,9,20,null,null,15,7

3

/ \

9 20

/ \

15 7

返回 true 。

示例 2:

给定二叉树 1,2,2,3,3,null,null,4,4

1

/ \

2 2

/ \

3 3

/ \

4 4

返回 false 。

思路:深度差小于2,返回true。

上代码,拿去即可运行:

java 复制代码
package onlyqi.daydayupgo06.leetcode;
 
public class TreeNode {
 
    private Integer value;
    private TreeNode left;
    private TreeNode right;
 
 
    public TreeNode() {
    }
 
    public TreeNode(Integer value) {
        this.value=value;
    }
 
    public TreeNode(Integer value, TreeNode left, TreeNode right) {
        this.value = value;
        this.left = left;
        this.right = right;
    }
 
    public Integer getValue() {
        return value;
    }
 
    public void setValue(Integer value) {
        this.value = value;
    }
 
    public TreeNode getLeft() {
        return left;
    }
 
    public void setLeft(TreeNode left) {
        this.left = left;
    }
 
    public TreeNode getRight() {
        return right;
    }
 
    public void setRight(TreeNode right) {
        this.right = right;
    }
}
java 复制代码
public class Tree {


    public static void main(String[] args) {
        TreeNode treeNode1 = new TreeNode(1);
        TreeNode treeNode2 = new TreeNode(2);
        TreeNode treeNode3 = new TreeNode(3);
        TreeNode treeNode4 = new TreeNode(4);
        TreeNode treeNode5 = new TreeNode(5);
        TreeNode treeNode6 = new TreeNode(6);
        TreeNode treeNode7 = new TreeNode(7);
        treeNode2.setLeft(treeNode4);
        treeNode2.setRight(treeNode5);
        treeNode1.setLeft(treeNode2);
        treeNode1.setRight(treeNode3);
        treeNode3.setLeft(treeNode6);

        System.out.println(isBalanced(treeNode1));

    }


    public static boolean isBalanced(TreeNode root) {
        return depth(root) != -1;
    }
    private static int depth(TreeNode root) {
        if (root == null) return 0;
        int left = depth(root.getLeft());
        if(left == -1) return -1;
        int right = depth(root.getRight());
        if(right == -1) return -1;
        return Math.abs(left - right) < 2 ? Math.max(left, right) + 1 : -1;
    }
}

运行结果:

我要刷300道算法题,第143道 。 尽快刷到200,每天搞一道 。

相关推荐
智者知已应修善业13 分钟前
【51单片机8位数码管同时倒计时从9999】2024-1-25
c++·经验分享·笔记·算法·51单片机
洛水水16 分钟前
【力扣100题】86.柱状图中最大的矩形
算法·leetcode·职场和发展
渡之23 分钟前
GRiM-Net 深度解析 | 无人机 GNSS 拒止场景下两阶段跨视角视觉定位框架
深度学习·算法·动态规划·无人机
测试仪器廖生1359025638542 分钟前
罗德与施瓦茨 FSP13频谱分析仪FSP30
网络·人工智能·算法
happymaker06261 小时前
LeetCodeHot100——560.和为K的子数组
算法
dtq04241 小时前
C语言刷题数组5,6(求平均值,求最大值)
c语言·数据结构·算法
郭梧悠1 小时前
Hash算法入门Hash冲突解决方案
算法·哈希算法
洛水水2 小时前
【力扣100题】81.寻找两个正序数组的中位数
数据结构·算法·leetcode
happymaker06262 小时前
LeetCodeHot100——155.最小栈
算法
洛水水3 小时前
【力扣100题】85.每日温度
算法·leetcode·职场和发展