Python:如何传递TreeNode引用

时间:2017-02-28 17:41:34

标签: python

我是Python新手。 TreeNode的定义:

class TreeNode(object):
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None

以下代码可以正常使用:

def recoverTree(self, root):
    self.pre, self.n1, self.n2 = None, None, None

    def visit(node):
        if node is None: return

        visit(node.left)

        if self.pre is not None and self.pre.val > node.val:
            if self.n1 is None: self.n1 = self.pre
            if self.n1 is not None: self.n2 = node

        self.pre = node
        visit(node.right)

    visit(root)
    self.n1.val, self.n2.val = self.n2.val, self.n1.val

以下代码无效,似乎prev, node1, node2 未通过引用传递:

def recoverTree(self, root):
    prev, node1, node2 = None, None, None

    def visit(node, pre, n1, n2):
        if node is None: return

        visit(node.left, pre, n1, n2)

        if pre is not None and pre.val > node.val:
            if n1 is None: 
                n1 = pre
            if n1 is not None:
                n2 = node

        pre = node
        visit(node.right, pre, n1, n2)

    visit(root, prev, node1, node2)
    node1.val, node2.val = node2.val, node1.val

为什么呢?这两段代码之间有什么不同吗? 感谢

0 个答案:

没有答案