我正在查看教程“使用算法和数据结构解决问题”(http://interactivepython.org/runestone/static/pythonds/Trees/SearchTreeImplementation.html)中的二进制搜索树部分。有几次,他们使用同名的“public”和“private”辅助方法,例如“put”方法:
def put(self,key,val):
if self.root:
self._put(key,val,self.root)
else:
self.root = TreeNode(key,val)
self.size = self.size + 1
def _put(self,key,val,currentNode):
if key < currentNode.key:
if currentNode.hasLeftChild():
self._put(key,val,currentNode.leftChild)
else:
currentNode.leftChild = TreeNode(key,val,parent=currentNode)
else:
if currentNode.hasRightChild():
self._put(key,val,currentNode.rightChild)
else:
currentNode.rightChild = TreeNode(key,val,parent=currentNode)
我也在其他地方看到过这种方法,但我不太了解动机。与将所有内容直接放在一种方法中相比有什么优势,仅仅是为了提高可读性吗?
基本原理是该类的用户不应该对“当前节点”一无所知。当前节点仅在递归插入过程中有意义,它不是树的永久属性。用户将树视为一个整体,并且只对其进行插入/查找操作。
也就是说,您可以通过使用默认值currentNode=None
并检查它来将两种方法合二为一。然而,这两种方法正在做截然不同的事情。该put
方法只是初始化根,而_put
递归插入,所以最好将它们分开。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句