Add nearest right neighbor (#2574)
This commit is contained in:
parent
ad380dcaa4
commit
0ab11140b5
84
DataStructures/Trees/nearestRightKey.java
Normal file
84
DataStructures/Trees/nearestRightKey.java
Normal file
@ -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;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user