From 35c796676a59f0715dd0626c8c55b19f31b2f06c Mon Sep 17 00:00:00 2001
From: Haley Glavina <HaleyGlavina@Haleys-MacBook-Pro.local>
Date: Mon, 2 Apr 2018 15:45:51 -0400
Subject: [PATCH] get method added to redBlackTree

# Conflicts:
#	src/search/RedBlackTree.java
#	src/search/RedBlackTreeTest.java
---
 Proposals/.DS_Store               | Bin 6148 -> 6148 bytes
 src/search/BasicSearchResult.java |  14 ++++
 src/search/RedBlackTree.java      |  55 +++++++++++-
 src/search/RedBlackTreeTest.java  | 135 ++++++++++++++++++++++++++++++
 4 files changed, 203 insertions(+), 1 deletion(-)
 create mode 100644 src/search/RedBlackTreeTest.java

diff --git a/Proposals/.DS_Store b/Proposals/.DS_Store
index f15975d6621e185c2e729fc3672df259aa712fcf..aae2b4c4fc898d3636803e688ef2162efafed52e 100644
GIT binary patch
delta 53
zcmZoMXffE3$i&9M#lgkPH94IrS(by7gEL-0qPp79z)VNM(9oz>N1@u%5Xd&QFxvc_
HNmdj9HlPda

delta 53
zcmZoMXffE3$i&9U$-&9XIXRsvSr){M7m%o~Ha0fVQ7|$$s?|}bwlJ~KQ7|<y-Ta(M
GRulj?N(=M=

diff --git a/src/search/BasicSearchResult.java b/src/search/BasicSearchResult.java
index c325486..68ca06d 100644
--- a/src/search/BasicSearchResult.java
+++ b/src/search/BasicSearchResult.java
@@ -3,12 +3,14 @@ package search;
 import java.util.ArrayList;
 
 import data.Record;
+import sort.GeneralRange;
 
 public class BasicSearchResult {
 	private ArrayList<Record> results;
 	private final double time;
 	private BST<Integer, Integer> histogram;
 	private Integer sum;
+	private 
 	
 	public BasicSearchResult(ArrayList<Record> results, double time) {
 		this.results = results;
@@ -41,4 +43,16 @@ public class BasicSearchResult {
 		}
 		return this.sum;
 	}
+	
+	/**
+	 * 
+	 * @param area
+	 */
+	public Iterable<RecordCluster> cluster(double area){
+		
+	}
+	
+	private ArrayList<GeneralRange> ranges(double lat, double lon, double area){
+		ArrayList<GeneralRange>()
+	}
 }
diff --git a/src/search/RedBlackTree.java b/src/search/RedBlackTree.java
index 8d5728e..45bfd91 100644
--- a/src/search/RedBlackTree.java
+++ b/src/search/RedBlackTree.java
@@ -16,9 +16,22 @@ public class RedBlackTree<Key, Value> {
 		
 		Integer[][] x = {{1, 1}, {2, 2}, {3, 3}, {4, 4}, {5, 5}, {6, 6}, {7, 7}, {8, 8}, {9, 9}};
 		RedBlackTree<Integer, Integer[]> myTree = new RedBlackTree<Integer, Integer[]>(fld, b1);
-		for(int i = 0; i < x.length; i++){
+
+		// Add first 5 nodes, expected get(6) result is null
+		for(int i = 0; i < 4; i++){
 			myTree.put(x[i]);
 		}
+		assert(myTree.get((Comparable<Integer>) 6) == null);
+
+		// Add remaining nodes, expected get(6) result is {6, 6} 
+		for(int i = 5; i < x.length; i++){
+			//System.out.println(x[i][0]);
+			myTree.put(x[i]);
+		}
+		
+		System.out.println("Root: " + myTree.root().key());
+		System.out.println("myTree.get(6).key(): " + (Integer) myTree.get((Comparable<Integer>) 6).key());
+
 		Node h = myTree.root(); 
 		System.out.println(h.key());
 		while (h.left() != null) {
@@ -26,6 +39,11 @@ public class RedBlackTree<Key, Value> {
 			h = h.left();
 		}
 	}
+<<<<<<< HEAD
+=======
+	
+	
+>>>>>>> 459508d... get method added to redBlackTree
 	
 	
 	/**
@@ -38,6 +56,41 @@ public class RedBlackTree<Key, Value> {
 		field = fld;
 	}
 	
+	/**
+	 * Wrapper method for retrieving the node that matches a desired key
+	 * @param key Key pointing to the desired node
+	 * @return A node containing who's key matches the input
+	 */
+	public Node<Key, Value> get(Comparable<Key> key) {
+		return get(this.root, key);
+	}
+	
+	/**
+	 * Finds the node in a tree whose key matches a desired key (if the matching node exists)
+	 * @param node Root of the subtree being searched
+	 * @param key Desired key to be searched for in a tree
+	 * @return The node containing the key, returns null if the key is not found
+	 */
+	private Node<Key, Value> get(Node<Key, Value> node, Comparable<Key> key) {
+		if (node.key() == key)
+			return node; 
+		// If key is greater than current node, look right
+		if (this.compare.compare(node.key(), key) < 0)
+			if (node.right() != null)
+				return get(node.right(), key);
+			else 
+				return null;
+		// If key is smaller than current node, look left
+		else if (this.compare.compare(node.key(), key) > 0)
+			if (node.left() != null)
+				return get(node.left(), key);
+			else 
+				return null;
+		// If node == null, key does not exist in the tree
+		return null;
+	}
+	
+	
 	/**
 	 * Getter method for the root of a tree
 	 * @return The root of a tree object
diff --git a/src/search/RedBlackTreeTest.java b/src/search/RedBlackTreeTest.java
new file mode 100644
index 0000000..f319f0b
--- /dev/null
+++ b/src/search/RedBlackTreeTest.java
@@ -0,0 +1,135 @@
+/**
+ * 
+ */
+package search;
+
+import static org.junit.Assert.*;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * @author HaleyGlavina
+ *
+ */
+public class RedBlackTreeTest {
+	
+	private GeneralCompare<Integer> b1;
+	private Field<Integer, Integer[]> fld;
+
+	/**
+	 * @throws java.lang.Exception
+	 */
+	@Before
+	public void setUp() throws Exception {
+		b1 = (a1, a2) -> (Integer) a1 - (Integer) a2;
+		fld = (a1) -> (Integer) a1[0];
+	}
+
+	/**
+	 * @throws java.lang.Exception
+	 */
+	@After
+	public void tearDown() throws Exception {
+	}
+
+	/**
+	 * Test method for {@link search.RedBlackTree#root()}.
+	 */
+	@Test
+	public void testRoot() {
+		Integer[][] x = {{1, 1}, {2, 2}, {3, 3}, {4, 4}, {5, 5}, {6, 6}, {7, 7}, {8, 8}, {9, 9}};
+		RedBlackTree<Integer, Integer[]> myTree = new RedBlackTree<Integer, Integer[]>(fld, b1);
+		
+		// Add first 5 nodes, expected root is 2
+		for(int i = 0; i < 4; i++){
+			myTree.put(x[i]);
+		}
+		assert((Integer) myTree.root().key() == 2);
+		
+		// Add remaining nodes, expected root is 4
+		for(int i = 5; i < x.length; i++){
+			myTree.put(x[i]);
+		}
+		assert((Integer) myTree.root().key() == 4);
+	}
+	
+	/**
+	 * Test method for {@link search.RedBlackTree#get(Node<Key, Value> node, Comparable<Key> key)}.
+	 */
+	@Test
+	public void testGet() {
+		Integer[][] x = {{1, 1}, {2, 2}, {3, 3}, {4, 4}, {5, 5}, {6, 6}, {7, 7}, {8, 8}, {9, 9}};
+		RedBlackTree<Integer, Integer[]> myTree = new RedBlackTree<Integer, Integer[]>(fld, b1);
+		
+		// Add first 5 nodes, expected get(6) result is null
+		for(int i = 0; i < 4; i++){
+			myTree.put(x[i]);
+		}
+		assert(myTree.get((Comparable<Integer>) 6) == null);
+		
+		// Add remaining nodes, expected get(6) result is {6, 6} 
+		for(int i = 5; i < x.length; i++){
+			myTree.put(x[i]);
+		}
+		assert(myTree.get(6).key() == (Comparable<Integer>) 6);
+		
+	}
+
+	/**
+	 * Test method for {@link search.RedBlackTree#put(java.lang.Object)}.
+	 */
+	@Test
+	public void testPut() {
+		Integer[][] x = {{1, 1}, {2, 2}, {3, 3}, {4, 4}, {5, 5}, {6, 6}, {7, 7}, {8, 8}, {9, 9}};
+		RedBlackTree<Integer, Integer[]> myTree = new RedBlackTree<Integer, Integer[]>(fld, b1);
+		for(int i = 0; i < x.length; i++){
+			myTree.put(x[i]);
+		}
+		Node h = myTree.root(); 
+		
+		// Check if right-most branch of tree matches what is expected
+		Integer[] expect = {4, 6, 7, 8, 9};
+		for (int i = 0 ; i < expect.length ; i++) {
+			assert(expect[i] == h.key());
+			h = h.right();
+		}
+	}
+
+	/**
+	 * Test method for {@link search.RedBlackTree#rotateLeft(search.Node)}.
+	 */
+	@Test
+	public void testRotateLeft() {
+		RedBlackTree<Integer, Integer[]> myTree = new RedBlackTree<Integer, Integer[]>(fld, b1);
+		Integer[][] x = {{1, 1}, {2, 2}, {3, 3}, {4, 4}};
+		myTree.put(x[0]);
+		myTree.put(x[1]);
+		assert((Integer) myTree.root().key() == 1);
+		
+		// Check if left rotation changes the root of the tree as expected
+		myTree.put(x[2]);
+		myTree.put(x[3]);
+		assert((Integer) myTree.root().key() == 2);
+		
+	}
+
+	/**
+	 * Test method for {@link search.RedBlackTree#rotateRight(search.Node)}.
+	 */
+	@Test
+	public void testRotateRight() {
+		RedBlackTree<Integer, Integer[]> myTree = new RedBlackTree<Integer, Integer[]>(fld, b1);
+		Integer[][] x = {{1, 1}, {2, 2}, {3, 3}, {4, 4}};
+		myTree.put(x[3]);
+		myTree.put(x[2]);
+		assert((Integer) myTree.root().key() == 4);
+		
+		// Check if right rotation changes the root of the tree as expected
+		myTree.put(x[1]);
+		myTree.put(x[0]);
+		assert((Integer) myTree.root().key() == 3);
+	}
+
+}
-- 
GitLab