代码思路:中序遍历,结果中如果有一个降序对,说明该两个node需交换;若有两个降序对,说明第一对的前一个node和第二对的后一个node需要交换。
class Solution:
def __init__(self):
self.res = []
def inorderTraversalSon(self,root):
if root is not None:
self.inorderTraversalSon(root.left)
self.res.append(root)
self.inorderTraversalSon(root.right)
def recoverTree(self, root: TreeNode) -> None:
self.inorderTraversalSon(root)
node1=None
node2=None
for i in range (len(self.res)-1):
if self.res[i].val>self.res[i+1].val and node1==None:
node1=self.res[i]
node2=self.res[i+1]
elif node1!=None and self.res[i].val>self.res[i+1].val:
node2=self.res[i+1]
node1.val,node2.val=node2.val,node1.val