1、前言
题目描述2、思路
可以利用二叉搜索树的性质,二叉搜索树都是 left < root < right 的,其中序遍历节点的值为递增。题目明确有两个节点是错误的,我们只要找出这两个节点即可。
我们发现,第一个节点总是比后一个节点大,第二个节点总是比前一个节点小,我们可以利用这种性质写代码。
3、代码
class Solution {
private TreeNode firstNode = null;
private TreeNode sencondNode = null;
private TreeNode prev = new TreeNode(Integer.MIN_VALUE);
public void recoverTree(TreeNode root) {
inOrder(root);
int temp = firstNode.val;
firstNode.val = sencondNode.val;
sencondNode.val = temp;
}
private void inOrder(TreeNode root){
if(root == null){
return;
}
inOrder(root.left);
if(firstNode == null && prev.val > root.val){
firstNode = prev;
}
if(firstNode != null && prev.val > root.val){
sencondNode = root;
}
prev = root;
inOrder(root.right);
}
}
网友评论