• 数据结构——平衡二叉树


    特征

    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 为头的深度
    }
  • 相关阅读:
    安装MySQL-python时报错
    人的成功平台很重要
    开源运维工具
    遗忘Windows Server 2008R2密码的处理方法
    操作系统下载和操作系统更新失败解决
    说说对SQL 语句优化有哪些方法?
    Git彻底删除历史提交记录的方法
    MSSQL备份脚本
    .NET Core Data Access
    各种数据库默认端口总结
  • 原文地址:https://www.cnblogs.com/zhengbin/p/6582413.html
Copyright © 2020-2023  润新知