Пример #1
0
//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;
}
Пример #2
0
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;
}