美文网首页
判断是否是平衡二叉树

判断是否是平衡二叉树

作者: 小蛋子 | 来源:发表于2019-03-19 23:22 被阅读0次

题目:输入一个二叉树,判断其是否是平衡二叉树。平衡二叉树的定义是任何节点的左右子树高度差都不超过1的二叉树。

解法一:编写一个求解节点深度的方法,然后从根节点开始判断其左右节点的深度相差是否大于1.

class BinTree(object):
    def __init__(self, value):
        self.value = value
        self.left = None
        self.right = None
    
    def get_depth(self, node):
        if not node:
            return 0
        
        left = self.get_depth(node.left)
        right = self.get_depth(node.right)
        return max(right, left) + 1
    
    def is_balance(self, proot):
        if not proot:
            return True
        
        left = self.get_depth(proot.left)
        right = self.get_depth(proot.right)
        
        if abs(left - right) > 1:
            return False
        
        return BinTree.is_balance(proot.left) and BinTree.is_balance(proot.right)

上述代码固然简洁,但我们也不难发现一个节点会被重复遍历多次,其时间效率不高。上述方法重复遍历的原因是从顶向下求解深度,如果我们从底向上判断并记录对应深度,我们就可以一边遍历一边判断,无需重复遍历。
考虑到节点为空时,他的深度为0,非空时,其深度大于0,当发现有一个节点的左右子树不平衡时,我们可以用一个小于0的数字来代表不平衡。

class BinTree(object):
    def __init__(self, value):
        self.value = value
        self.left = None
        self.right = None
    
    def isBalance(self, proot):
        def max_depth(root):
            if not root:
                return 0

            left = max_depth(proot.left)
            right = max_depth(proot.right)

            if left == -1 or right == -1 or abs(right - left) > 1:
                return -1

            return 1 + max(left, right)
    
        return max_depth(proot) != -1

相关文章

  • 判断一个树是否是BST 求一棵平衡二叉树的最小深度 判断一棵二叉树是否高度平衡

  • 关于二叉树的算法题

    前序遍历中序遍历后序遍历判断是否是平衡二叉树判断是否是对称二叉树判断二叉树高度按照层遍历二叉树判断二叉树宽度

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

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

  • 平衡二叉树

    题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树。 平衡二叉树(Self-balancing binary ...

  • 平衡二叉树

    题目描述输入一棵二叉树,判断该二叉树是否是平衡二叉树。

  • 39、平衡二叉树

    题目描述输入一棵二叉树,判断该二叉树是否是平衡二叉树。

  • 牛客-剑指0ffer-平衡二叉树

    题目描述输入一棵二叉树,判断该二叉树是否是平衡二叉树。

  • 19.判断二叉平衡树

    题目 输入一棵二叉树,判断该二叉树是否是平衡二叉树。 代码

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

  • 面试题:平衡二叉树

    题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树。 知识点 平衡二叉树 Qiang的思路 平衡二叉树是指一个...

网友评论

      本文标题:判断是否是平衡二叉树

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