class Solution(object):
def checkOrder(self, node, checkNode, dsc):
if checkNode[0]!=None: return
if node==None:
return
if dsc:
self.checkOrder(node.left, checkNode, dsc)
if checkNode[0]!=None:
return
if checkNode[1]!=None and checkNode[1].val>node.val:
checkNode[0]=checkNode[1]
return
checkNode[1]=node
self.checkOrder(node.right, checkNode, dsc)
else:
self.checkOrder(node.right, checkNode, dsc)
if checkNode[0]!=None:
return
if checkNode[1]!=None and checkNode[1].val<node.val:
checkNode[0]=checkNode[1]
return
checkNode[1]=node
self.checkOrder(node.left, checkNode, dsc)
return None
def recoverTree(self, root):
"""
:type root: TreeNode
:rtype: None Do not return anything, modify root in-place instead.
"""
wrongOrder0=[None, None]
self.checkOrder(root, wrongOrder0, True)
wrongOrder1=[None, None]
self.checkOrder(root, wrongOrder1, False)
wrongOrder0[0].val,wrongOrder1[0].val=wrongOrder1[0].val,wrongOrder0[0].val