Function 递归函数:保留原始参数

Function 递归函数:保留原始参数,function,python-2.7,recursion,binary-tree,Function,Python 2.7,Recursion,Binary Tree,我已经为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

我已经为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()的原始节点==根来调用它

我的问题是,除了添加另一个刚刚解析过的参数外,我不知道还有什么其他方法可以保存根

原始预期用途:treesort(根目录) 现在:treesort(根,根)

我知道我可以编写另一个函数来调用这个函数,它只有一个参数。我只是好奇是否还有其他更优雅的方式,比如(它不起作用):


通常,您会使用某种sentinel默认值,通常为
None

def treesort(node, root=None):
    if root is None:
        root = node
    ...

重载函数怎么样?有一个版本只接受第一个参数并使用该参数调用第二个版本两次吗?
def treesort(node, root=None):
    if root is None:
        root = node
    ...