LeetCode二叉树专题 (7) 平衡二叉树

作者: ZSACH | 来源:发表于2020-07-14 11:09 被阅读0次
image

题目

给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:
一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1

解题思路

根据题目中高度平衡的定义,这道题就转换了求左右子树高度的绝对值,小于等于1就是平衡二叉树。这个就是这道题的子问题,我们只要迭代这个子问题就可以了,如果一棵树上的所有节点都满足这个条件,那么这个树就是一个平衡二叉树。求二叉树的深度,我们之前有过类似的题目LeetCode二叉树专题 (4) 二叉树的最大深度
现在我们想这么一个问题,如果从跟节点判断起,再判断他的左右节点,这样是不是会重复计算很多次底部树的深度,显然这样的效率是很低,所以我们最好是从底部开始算起,这样底部的数据就可以让顶层的节点使用,不需要重复计算了。

    public boolean isBalanced(TreeNode root) {
        //-1标记不符合平衡的条件
        return getDeep(root) != -1;
    }

    public int getDeep(TreeNode root){
        if(root == null){
            return 0;
        }
        int left = getDeep(root.left) + 1;
        int right = getDeep(root.right) + 1;
        if(left == 0 || right == 0){
            //如果有一个节点不满足,那么所有都直接返回-1
            return -1;
        }
        if(Math.abs(left-right) > 1){
            //这个节点的左右最大深度差值大于1,不是平衡的
            return -1;
        }
        //返回左右的深度
        return Math.max(left,right);
    }

相关文章

  • LeetCode 每日一题 [70] 平衡二叉树

    LeetCode 平衡二叉树[https://leetcode-cn.com/problems/ping-heng...

  • 1 二叉树的最近公共祖先(leetcode 236) 2 判断是否为平衡二叉树 3 判断二叉树是否为满二叉树 4 ...

  • 2019-01-17 Day12

    来源:LeetCode 给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为: 一个二...

  • 平衡二叉树

    平衡二叉树 https://leetcode-cn.com/problems/balanced-binary-tr...

  • 树--平衡二叉树、获取所有路径

    平衡二叉树 题号[https://leetcode-cn.com/problems/balanced-binar...

  • 【D3】平衡二叉树 & 二叉树的最小深度 (LC 110&111

    110. 平衡二叉树[https://leetcode-cn.com/problems/balanced-bina...

  • 剑指 offer:39、平衡二叉树

    39. 平衡二叉树 题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树。 解题思路: 平衡二叉树:Wiki:在...

  • python-平衡二叉树

    Leetcode:输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超...

  • 平衡二叉树

    LeetCode题目地址 给定一个二叉树,确定它是高度平衡的。对于这个问题,一棵高度平衡的二叉树的定义是:一棵二叉...

  • LeetCode二叉树专题 (7) 平衡二叉树

    题目 给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点的左右两个...

网友评论

    本文标题:LeetCode二叉树专题 (7) 平衡二叉树

    本文链接:https://www.haomeiwen.com/subject/ibexhktx.html