在递归类函数中,如何使用类成员作为默认参数?
我目前正在使用以下代码片段(python 3)。 height 是递归类函数。我想用于 node 的默认参数是 self._root 。为了实现这一点,我做了类似跟随的事情,但这是一个非常圆的方式,我必须定义另一个函数 height_tree 。有更直接的方法吗?
# following code works #
class BTree:
def __init__(self, node=None):
self._root = node
def height_tree(self):
return self.height(self._root)
def height(self, node):
if node is not None:
height = max(self.height(node.get_left()), self.height(node.get_right())) + 1
else:
height = 0
return height
我想做类似以下的事情,但它显然不起作用!
def height(self, node=self._root)
# code from above follows
但是,当节点为None时,我不能使用将root分配给节点的替代技巧,因为这是递归中的结束条件之一
def height(self, node)
if node is None:
node = self._root
# this will conflict with logic in code block above#
有没有推荐的方法来处理这种情况?
答案 0 :(得分:0)
您可以使用哨兵对象:
button2_Click()
由于此类对象具有唯一的内存地址,因此它永远不会与任何其他对象(包括sentinel = object()
def height(self, node=sentinel)
if node is sentinel:
node = self._root
...
)相同。
答案 1 :(得分:0)
您始终可以创建任意哨兵:
SENTINEL = object()
class BTree:
def __init__(self, node=None):
self._root = node
def height_tree(self):
return self.height(self._root)
def height(self, node=SENTINEL):
if node is SENTINEL:
node = self._root
elif node is not None:
height = max(self.height(node.get_left()), self.height(node.get_right())) + 1
else:
height = 0
return height