解决BST问题是正确的方法吗?

时间:2019-07-12 06:53:21

标签: python data-structures

我必须检查二进制树是否平衡,并且我很确定我的解决方案应该可以工作。 enter image description here

import sys
class Solution:
    def isBalanced(self, root: TreeNode) -> bool:
        cache = {
            max:-sys.maxsize, #min possible number
            min:sys.maxsize   #max possible number
        }
        self.checkBalanced(root, cache, 0)
        return cache[max] - cache[min] <= 1

    def checkBalanced(self,node, cache, depth):
        if node is None:
            if depth < cache[min]:
                cache[min] = depth
            if depth > cache[max]:
                cache[max] = depth
        else:
            self.checkBalanced(node.left, cache, depth+1)
            self.checkBalanced(node.right, cache, depth+1)

但是在这种情况下,我有一个错误 enter image description here

以下是有关Leetcode的问题链接:https://leetcode.com/problems/balanced-binary-tree

1 个答案:

答案 0 :(得分:0)

您提供的链接中有一个定义:

  

对于此问题,将高度平衡的二叉树定义为:一棵二叉树,其中每个节点的两个子树的深度永远不会相差超过1。

对于给定的“错误”输入,您的代码将计算cache [max] = 5,cache [min] = 3,因此它返回false。但是,如果考虑根,则其左子树的深度为4,右子树的深度为3,因此满足定义。

enter image description here

您应该找到每个根的左右子树的深度,但是您的代码会计算深度(您的cache[max])和到任何子树叶子的最短路径的长度(您的cache[min])。

我希望您在经过这些澄清后可以轻松地修复代码。