Two elements of a binary search tree (BST) are swapped by mistake.
Recover the tree without changing its structure.
Note:A solution using O( n ) space is pretty straight forward. Could you devise a constant space solution?
confused what "{1,#,2,3}"
means? > read more on how binary tree is serialized on OJ.
思路:对BST进行中序遍历,如果是正常的BST,则是顺序遍历。但因为有两个节点交换了,分两种情况,如果只遇到一个节点不满足前节点比后节点小,则该节点和前一个相邻节点交换了,如果遇到两个,则是这两个节点交换了。
#Definition for a binary tree node
#class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
# @param root, a tree node
# @return a tree node
pre = None
err1 = None
err2 = None
def inorder(self,node):
if node == None:
return
self.inorder(node.left)
if self.pre != None and node.val < self.pre.val:
if self.err1 == None:
self.err1 = self.pre
self.err2 = node
else:
self.err2 = node
self.pre = node
self.inorder(node.right)
def recoverTree(self, root):
self.inorder(root)
tmp = self.err1.val
self.err1.val = self.err2.val
self.err2.val = tmp
return root