I am new to Python. Defination of TreeNode:
class TreeNode(object):
def __init__(self, x):
self.val = x
self.left = None
self.right = None
The following codes work fine:
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
The following codes cannot work, it seems that prev, node1, node2
are not passed by reference:
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
Why? any differences between the two pieces of codes? Thanks