//Call this with nextLevelSortedOnX =true! static MiniTree<float> insertIntoKD(float[] XY, bool nextLevelSortedOnX, MiniTree<float> root) { //If the root is empty we cant do squat. if(root.isEmpty() == false) { //We are in a level that is sorted by X values. if(nextLevelSortedOnX == true) { //Node already present! if (XY [0] == root.getXValue() && XY [1] == root.getYValue()) { Console.WriteLine("Node already there!"); return root; } //Node to be inserted has bigger X value, so we look in the right tree. else if(XY[0] > root.getXValue()) { return new Node<float>(XY[0], XY[1], root.getLeftMTree(), insertIntoKD(XY, false, root.getRightMTree())); } //Node to be inserted has smaller X value, so we look in the right tree. else { return new Node<float>(XY[0], XY[1], insertIntoKD(XY, false, root.getLeftMTree()), root.getRightMTree()); } } //Next level sorted on Y else { //Node already present! if (XY [0] == root.getXValue() && XY [1] == root.getYValue()) { Console.WriteLine("Node already there!"); return root; } //Node to be inserted has bigger Y value, so we look in the right tree. else if(XY[1] > root.getYValue()) { //TODO: ANDERE TREE MOET OOK INGEVULD WORDEN! return new Node<float>(XY[0], XY[1], root.getLeftMTree(), insertIntoKD(XY, false, root.getRightMTree())); } //Node to be inserted has smaller Y value, so we look in the left tree. else { return new Node<float>(XY[0], XY[1], insertIntoKD(XY, false, root.getLeftMTree()), root.getRightMTree()); } } } else return root; }
static bool findNode(float[] XY, bool nextLevelSortedOnX, MiniTree<float> root) { //If the root is empty we cant do squat. if(root.isEmpty() == false) { //We are in a level that is sorted by X values. if(nextLevelSortedOnX == true) { //Node found! if (XY [0] == root.getXValue() && XY [1] == root.getYValue()) { Console.WriteLine("Node found!"); return true; } //Node has bigger X value, so we look in the right tree. else if(XY[0] > root.getXValue()) { return findNode(XY, false, root.getRightMTree()); } //Node has smaller X value, so we look in the right tree. else { return findNode(XY, false, root.getLeftMTree()); } } //Next level sorted on Y else { //Node found! if (XY [0] == root.getXValue() && XY [1] == root.getYValue()) { Console.WriteLine("Node already there!"); return true; } //Node has bigger Y value, so we look in the right tree. else if(XY[1] > root.getYValue()) { return findNode(XY, true, root.getRightMTree()); } //Node thas smaller Y value, so we look in the left tree. else { return findNode(XY, true, root.getLeftMTree()); } } } else return false; }