递归函数:保持原始参数

时间:2014-05-29 13:58:21

标签: 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)

    # 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):
...

1 个答案:

答案 0 :(得分:0)

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

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