85 lines
2.0 KiB
Java
85 lines
2.0 KiB
Java
package DataStructures.NRKTrees;
|
|
|
|
import java.util.Scanner;
|
|
import java.util.concurrent.ThreadLocalRandom;
|
|
|
|
class Main {
|
|
|
|
public static void main(String[] args) {
|
|
NRKTree root = BuildTree();
|
|
Scanner sc = new Scanner(System.in);
|
|
System.out.print("Enter first number: ");
|
|
int inputX0 = sc.nextInt();
|
|
int toPrint = nearestRightKey(root, inputX0);
|
|
System.out.println("Key: " + toPrint);
|
|
}
|
|
|
|
public static NRKTree BuildTree() {
|
|
int randomX = ThreadLocalRandom.current().nextInt(0, 100 + 1);
|
|
NRKTree root = new NRKTree(null, null, randomX);
|
|
|
|
for (int i = 0; i < 1000; i++) {
|
|
randomX = ThreadLocalRandom.current().nextInt(0, 100 + 1);
|
|
root = root.insertKey(root, randomX);
|
|
}
|
|
|
|
return root;
|
|
}
|
|
|
|
public static int nearestRightKey(NRKTree root, int x0) {
|
|
//Check whether tree is empty
|
|
if(root == null){
|
|
return 0;
|
|
}
|
|
else {
|
|
if(root.data - x0 > 0){
|
|
// Go left
|
|
int temp = nearestRightKey(root.left, x0);
|
|
if(temp == 0){
|
|
return root.data;
|
|
}
|
|
return temp;
|
|
} else {
|
|
// Go right
|
|
return nearestRightKey(root.right, x0);
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|
|
class NRKTree {
|
|
|
|
public NRKTree left;
|
|
public NRKTree right;
|
|
public int data;
|
|
|
|
public NRKTree(int x) {
|
|
this.left = null;
|
|
this.right = null;
|
|
this.data = x;
|
|
}
|
|
|
|
public NRKTree(NRKTree right, NRKTree left, int x) {
|
|
this.left = left;
|
|
this.right = right;
|
|
this.data = x;
|
|
}
|
|
|
|
public NRKTree insertKey(NRKTree current, int value) {
|
|
if (current == null) {
|
|
return new NRKTree(value);
|
|
}
|
|
|
|
if (value < current.data) {
|
|
current.left = insertKey(current.left, value);
|
|
} else if (value > current.data) {
|
|
current.right = insertKey(current.right, value);
|
|
}
|
|
|
|
return current;
|
|
}
|
|
}
|