直接看题:
我们知道对于二叉搜索树来说,对其中序遍历得到的就是一个有序数组了。在这篇博客中,我们讨论恢复交换两个元素的排序数组的问题,和本题如出一辙。直接看AC代码:
class Solution {
private TreeNode prev = new TreeNode(Integer.MIN_VALUE);
private TreeNode first;
private TreeNode second;
public void recoverTree(TreeNode root) {
if(root == null) {
return ;
}
traverse(root);
int num = first.val;
first.val = second.val;
second.val = num;
}
private void traverse(TreeNode root) {
if(root == null) {
return ;
}
traverse(root.left);
if(first == null && prev.val >= root.val) {
first = prev;
second = root;
}
if(prev.val >= root.val) {
second = root;
}
prev = root;
traverse(root.right);
}
}