import java.util.*;
class Node {
int val;
Node left;
Node right;
Node() {}
Node(int val) {
this.val = val;
}
Node(int val, Node left, Node right) {
this.val = val;
this.left = left;
this.right = right;
}
}
public class Main {
public static Node createBinaryTree(int[] arr) {
if (arr == null || arr.length == 0) return null;
Node root = new Node(arr[0]);
Queue<Node> queue = new LinkedList<>();
queue.add(root);
int i = 1;
while (!queue.isEmpty() && i < arr.length) {
Node current = queue.poll();
if (i < arr.length && arr[i] != -1) {
current.left = new Node(arr[i]);
queue.add(current.left);
}
i++;
if (i < arr.length && arr[i] != -1) {
current.right = new Node(arr[i]);
queue.add(current.right);
}
i++;
}
return root;
}
public static void recoverTree(Node root) {
Stack<Node> stack = new Stack<>();
Node current = root;
Node lastProcessed = null;
Node[] swapped = new Node[2];
while (!stack.isEmpty() || current != null) {
while (current != null) {
stack.push(current);
current = current.left;
}
current = stack.pop();
if (lastProcessed != null && lastProcessed.val > current.val) {
if (swapped[0] == null) {
swapped[0] = lastProcessed;
swapped[1] = current;
}
else {
swapped[1] = current;
break;
}
}
lastProcessed = current;
current = current.right;
}
int temp = swapped[0].val;
swapped[0].val = swapped[1].val;
swapped[1].val = temp;
}
static void printInorder(Node node) {
if (node == null)
return;
printInorder(node.left);
System.out.print(node.val+" ");
printInorder(node.right);
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int arr[]=new int[n];
for(int i=0;i<n;i++)
arr[i]=sc.nextInt();
Node root=createBinaryTree(arr);
recoverTree(root);
printInorder(root);
}
}
To embed this program on your website, copy the following code and paste it into your website's HTML: