BST总深度并发症

时间:2015-02-15 00:52:54

标签: python binary-search-tree depth

以下是工作BST的摘录:

class BinaryTree():

    def __init__(self,rootid):
      self.left = None
      self.right = None
      self.rootid = rootid
    def getLeftChild(self):
        return self.left
    def getRightChild(self):
        return self.right
    def setNodeValue(self,value):
        self.rootid = value
    def getNodeValue(self):
        return self.rootid

我决定不展示上述课程的所有功能,只考虑我想要实现的重要功能。

我想要的是计算树中每个节点的总深度,并尝试使用以下函数:

def depth(tree, count=1):
    if tree != None:
        return count + depth(tree.getLeftChild(), count+1) + depth(tree.getRightChild(), count+1)

count=1表示根节点的深度为1。

然而,这个函数的问题是当它到达None节点时崩溃,我不知道如何解决它。

这是我尝试使用该功能时收到的错误消息:

TypeError: unsupported operand type(s) for +: 'int' and 'NoneType'

有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:1)

您的递归函数depth需要中断条件:

def depth(tree):
    if tree == None:
        return 0
    else:
        return 1 + max(depth(tree.getLeftChild()), depth(tree.getRightChild()))

你忘了在子树的深处附近max

上面的代码段会在tree == None后立即失败(当节点在任何一方都没有子节点时)。然后返回任何内容,隐式返回Python中的None