我已经为treap实现了一个排序功能:
def treesort(node, root):
if node is None:
return
# Left child has higher priority
if node.left != None and node.left.priority > node.priority:
node = treerotateright(node)
treesort(root, root)
# Right child has higher priority
if node.right != None and node.right.priority > node.priority:
node = treerotateleft(node)
treesort(root, root)
treesort(node.left, root)
treesort(node.right, root)
基本上,你通过treap递归导航,如果其中一个孩子有更高的 您优先旋转优先级较高的优先级。插入新节点后,将调用 treesort()。因此,只有一个节点未排序,只要treap未排序就应该旋转。 而不是外部循环反复调用 treesort()直到treap排序,我想到了添加另一个'递归层?'如果检测到未排序的节点。 我希望 treesort()使用原始节点== root来调用它。
我的问题是除了添加另一个刚刚解析过的参数之外,我不知道保存根的任何其他方法。
原定用途: treesort(root) 现在: treesort(root,root)
我知道我可以写另一个函数来调用只有一个参数的函数。我只是好奇是否有另一种更优雅的方式(它不起作用):
def treesort(node, root=node):
...
答案 0 :(得分:0)
通常,您会使用某种哨兵默认值,通常为None
:
def treesort(node, root=None):
if root is None:
root = node
...