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