以下是工作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'
有人可以帮帮我吗?
答案 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
。