• LeetCode算法题-Balanced Binary Tree(Java实现)


    这是悦乐书的第167次更新,第169篇原创

    01 看题和准备

    今天介绍的是LeetCode算法题中Easy级别的第26题(顺位题号是110)。给定二叉树,判断它是否是高度平衡的。对于此问题,高度平衡二叉树定义为:一个二叉树,其中每个节点的两个子树的深度从不相差超过1。例如:

    给定以下树[3,9,20,null,null,15,7]:

            3
          /   
         9    20
        / 
      15   7
    

    返回true。

    给定以下树[1,2,2,3,3,null,null,4,4]:

              1
             / 
            2   2
           / 
          3   3
         / 
        4   4
    

    返回false。

    本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。

    02 解题

    在昨天的那道题里,我们介绍了平衡树的概念,今天这道题也和平衡树有关,要判断一个二叉树是否为一颗平衡树,我们需要计算从根节点开始的左右子树的深度。

    之前有道题是求二叉树的最长路径,如果没有印象的话可以找找历史文章。对于此题,可以借鉴那道题的思路,但是稍微有点不同,在拿到左子树和右子树的深度后,我们还要做下判断,看是否相差大于1,这一步在返回最后的深度前。

    特殊情况:当二叉树为空时,他也是一颗平衡树。

    public boolean isBalanced(TreeNode root) {
        if (root == null) {
            return true;
        }
        int dep = getDeepth(root);
        return dep >= 0;
    }
    
    public int getDeepth(TreeNode t){
        if (t == null) {
            return 0;
        }
        int left = getDeepth(t.left);
        int right = getDeepth(t.right);
        if (left == -1 || right == -1 || Math.abs(left-right)>1) {
            return -1;
        }
        return 1+Math.max(left, right);
    }
    

    如果left和right两数之差大于1,则返回-1,那么剩下没有遍历到的节点有可能等于-1,因此在前面还需要判断下left和right是否等于-1。

    03 小结

    以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

  • 相关阅读:
    ABP之动态WebAPI
    ssh下常用操作汇总(good)
    XP下类似%windir% %userprofile% 的变量的说明(转)
    Cannot update paths and switch to branch at the same time(转)
    git branch(转)
    Git提交代码的处理流程(转)
    Android锁定EditText内容和随机生成验证码
    Android L下载
    vi 命令 使用方法
    Openfire开发配置,Openfire源码配置,OpenFire二次开发配置
  • 原文地址:https://www.cnblogs.com/xiaochuan94/p/9942751.html
Copyright © 2020-2023  润新知