zoukankan      html  css  js  c++  java
  • 数据结构——平衡二叉树

    特征

    1、空树是平衡二叉树。
    2、如果一棵树不为空,并且其中所有的子树都满足各自的左子树与右子树的高度差都不超过 1。

    下面介绍一个简单应用,平衡二叉树的相关操作以后补充。

    判断一棵二叉树是否为平衡二叉树

    给定一颗二叉树的头结点 head,判断一棵树是否是平衡二叉树。

    1.1、左子树是否为平衡二叉树
    1.2、记录左子树的深度,最深到达哪一层,记为 LH
    2.1、右子树是否为平衡二叉树
    2.2、记录右子树的深度,最深到达哪一层,记为 RH
    3、如果左子树或右子树有一个不是平衡二叉树,则整棵树就不是平衡二叉树
    4、如果左、右子树都是平衡二叉树,那么再比较两者深度的差值,如果大于 1,那么就不是平衡二叉树,否则就是平衡二叉树。

    public boolean check(TreeNode root) {
        boolean[] res = new boolean[1];
        res[0] = true;
        int level = 0;
        getHeight(root, level, res);// 获得以根结点为头的深度
        return res[0];
    }
    
    private int getHeight(TreeNode head, int level, boolean[] res) {
        if (head == null) return level; // 如果当前 head 为空,则返回当前所到达的深度
        int LH = getHeight(head.left, level+1, res); // 获得以当前 head 为头的左子树深度
        if (!res[0]) return level; // 如果以当前 head 为头的左子树不是 AVL,直接返回当前所到达的深度
        int RH = getHeight(head.right, level+1, res); // 获得以当前 head 为头的右子树深度
        if (!res[0]) return level; // 如果以当前 head 为头的右子树不是 AVL,直接返回当前所达到的深度
        if (Math.abs(LH - RH) > 1) res[0] = false; // 比较以当前 head 为头的左子树深度和右子树深度,如果其相差大于 1,则说明以当前 head 为头的二叉树不是 AVL
        return Math.max(LH, RH); // 最后返回当前以 head 为头的深度
    }
  • 相关阅读:
    【Java】Java网络编程
    (4.47)sql server 中的 values 构造临时表
    阿里时序数据库 telegraf+influxdb+grafana for sqlserver input plugin
    全景互动制作工具
    湖南师范大学的案例
    git观点
    js-cookie对cookie的操作
    hsf的意义在于什么
    Prettier看这一篇就行了
    关于微前端的观点
  • 原文地址:https://www.cnblogs.com/zhengbin/p/6582413.html
Copyright © 2011-2022 走看看