Skip to content

added impl for algorithm and base objects for algorithm #2574

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 12 commits into from
Oct 27, 2021
84 changes: 84 additions & 0 deletions DataStructures/Trees/nearestRightKey.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
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;
}
}