0

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

hehe123456
  • 31
  • 2
  • 5

0 Answers0