My code is giving a bst which is different from yours but its correct please specify that it if only right and left skew is only allowed

import java.util.*;
public class Main {
static class BST {
private class Node{
int data;
Node left;
Node right;

	Node(){}
	
	Node(int data){
		this.data=data;
		
	}
}
private Node root;
BST(int a[]){
	this.root=construct(a, 0, a.length-1);
}

private Node construct(int a[], int lo, int hi) {
	if(lo>hi) {
		return null;
	}
	int mid = (lo+hi)/2;
	
	Node nn = new Node(a[mid]);
	nn.left=construct(a, lo, mid-1);
	nn.right = construct(a, mid+1, hi);
	
	return nn;
	
}
	public void preOrder(){
		preOrder(this.root);
		System.out.println();
	}
	private void preOrder(Node node){
		if(node == null){
			return;
		}
		System.out.print(node.data+" ");
		preOrder(node.left);
		preOrder(node.right);
	} 
}

public static void main(String args[]) {
	Scanner sc = new Scanner(System.in);
	int n = sc.nextInt();
	for(int j = 0;j<n;j++){
		int m = sc.nextInt();
		int a[] = new int[m];
		for(int i=0; i<m;i++){
			a[i] = sc.nextInt();
		}
		int k1= sc.nextInt(), k2 = sc.nextInt();
		int b[] = new int[m];
		b=mergeSort(a, 0, a.length-1);
		BST tree = new Main.BST(b);
		System.out.print("# Preorder : ");
		tree.preOrder();
		System.out.print("# Nodes within range are : ");
		for(int i =0;i<m;i++){
			if(b[i]>=k1 && b[i]<=k2 ){
				System.out.print(b[i]+" ");
			}
		}
		System.out.println();
	}
}

public static int[] mergeSortedArray(int a[] ,int b[] ) {
	int ml = a.length + b.length;
	int [] merged = new int[ml];
	int i=0,j=0,k=0;
	while(i<a.length &&j<b.length) {
		if(a[i]<=b[j]) {
			merged[k]= a[i];
			i++;
			k++;
		}
		else {
			merged[k] = b[j];
			j++;
			k++;
		}
	}
	
		while(j<b.length) {
			merged[k] = b[j];
			j++;
			k++;
		
	}
	
		while(i<a.length) {
			merged[k] = a[i];
			i++;
			k++;
		}
	

	return merged;
	
}
public static int[] mergeSort(int a[], int lo, int hi) {
	if(lo == hi) {
		int br[] = new int[1];
		br[0] = a[lo];
		return br;
	}
	int mid= (lo+hi)/2;
	int x [] = mergeSort(a, lo, mid );
	int y [] =mergeSort(a, mid+1, hi);
	 
	return mergeSortedArray(x, y);
}

Hey @Vishu_1801
Dont use sorted arr for construct fun.
beczz root Node is change . add Node Manually

How we will come to know which one is root node??

arr[0] is root Node .
Node manually add kro