我是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
为什么呢?这两段代码之间有什么不同吗? 感谢