题目
解析:
这道题目的解法有很多,但是我在这边只介绍一种比较基本的也最容易理解的方法。解这道题的关键在于,二叉查找树的中序遍历是一个单调递增的序列。所以把错误的二叉查找树复原之后,第一个错误位置的元素会比他后一个元素大,而第二个错误的元素会比他前面的元素小,根据这样的规律就可以找出两个元素,所以具体的步骤如下:
- 将原树进行中序遍历
- 找出被交换的两个元素
- 遍历原树,修改相应两个位置的值
python代码如下:
def recoverTree(self, root: TreeNode) -> None:
"""
Do not return anything, modify root in-place instead.
"""
def inorder(root):
return inorder(root.left)+[root.val]+inorder(root.right) if root else []
def find_swap(nums):
x = y = -1
for i in range(len(nums)-1):
if nums[i+1]<nums[i]:
y = nums[i+1