package func.inst;
import java.io.Serializable;
import shared.Instance;
/**
* A node in a KDTree
*/
public class KDTreeNode implements Serializable, Comparable {
/**
* The key corresponding to this node
*/
private Instance instance;
/**
* The dimension along which this node is split
*/
private int dimension;
/**
* The tree that is smaller along the chosen dimension
*/
private KDTreeNode left;
/**
* The tree that is bigger along the chosen dimension
*/
private KDTreeNode right;
/**
* Create a new KDTreeNode
* @param key the key for the node
* @param data the the data
*/
public KDTreeNode(Instance key) {
this.instance = key;
}
/**
* Get the value of this node in the split dimension
* @return the value
*/
public double getSplitValue() {
return instance.getContinuous(dimension);
}
/**
* Get the key for this node
* @return the key
*/
public Instance getInstance() {
return instance;
}
/**
* Set the dimension
* @param dimension the dimension
*/
public void setDimension(int dimension) {
this.dimension = dimension;
}
/**
* Get the dimension along which this node is split
* @return the dimension
*/
public int getDimension() {
return dimension;
}
/**
* Get the left node
* @return the left node
*/
public KDTreeNode getLeft() {
return left;
}
/**
* Set the left node
* @param node the left node
*/
public void setLeft(KDTreeNode node) {
left = node;
}
/**
* Get the right node
* @return the right node
*/
public KDTreeNode getRight() {
return right;
}
/**
* Set the right node
* @param node the node
*/
public void setRight(KDTreeNode node) {
right = node;
}
/**
* @see java.lang.Comparable#compareTo(java.lang.Object)
*/
public int compareTo(Object o) {
double value = getSplitValue();
double otherValue = ((KDTreeNode) o).getInstance().getContinuous(dimension);
if (value < otherValue) {
return -1;
} else if (value > otherValue) {
return 1;
} else {
return 0;
}
}
}