Просмотр исходного кода

Merge pull request #952 from FridaTveit/BinarySearchTreeUseGenerics

binary-search-tree: use generics
Stuart Kent 9 лет назад
Родитель
Сommit
e1a93578c1

+ 38
- 44
exercises/binary-search-tree/.meta/src/reference/java/BinarySearchTree.java Просмотреть файл

@@ -1,49 +1,11 @@
1
+import java.util.*;
1 2
 
2
-import java.util.ArrayList;
3
-import java.util.Collections;
4
-import java.util.LinkedList;
5
-import java.util.List;
6
-import java.util.Queue;
7
-
8
-public class BinarySearchTree<T extends Comparable<T>> {
9
-
10
-    public static class Node<T> {
11
-
12
-        private T data;
13
-        private Node<T> left = null;
14
-        private Node<T> right = null;
15
-
16
-        public Node(T data) {
17
-            this.data = data;
18
-        }
19
-
20
-        public Node<T> getLeft() {
21
-            return left;
22
-        }
23
-
24
-        public void setLeft(Node<T> left) {
25
-            this.left = left;
26
-        }
27
-
28
-        public Node<T> getRight() {
29
-            return right;
30
-        }
31
-
32
-        public void setRight(Node<T> right) {
33
-            this.right = right;
34
-        }
35
-
36
-        public T getData() {
37
-            return data;
38
-        }
39
-
40
-    }
3
+class BinarySearchTree<T extends Comparable<T>> {
41 4
 
42 5
     private Node<T> root;
43
-
44 6
     private int nodeCount = 0;
45 7
 
46
-    public void insert(T value) {
8
+    void insert(T value) {
47 9
         if (root == null) {
48 10
             root = new Node<>(value);
49 11
         } else {
@@ -52,19 +14,19 @@ public class BinarySearchTree<T extends Comparable<T>> {
52 14
         this.nodeCount++;
53 15
     }
54 16
 
55
-    public List<T> getAsSortedList() {
17
+    List<T> getAsSortedList() {
56 18
         List<T> result = new ArrayList<>(this.nodeCount);
57 19
         this.putInSortedOrderToList(this.root, result);
58 20
         return Collections.unmodifiableList(result);
59 21
     }
60 22
 
61
-    public List<T> getAsLevelOrderList() {
23
+    List<T> getAsLevelOrderList() {
62 24
         List<T> result = new ArrayList<>(this.nodeCount);
63 25
         this.putInLevelOrderToList(this.root, result);
64 26
         return Collections.unmodifiableList(result);
65 27
     }
66 28
 
67
-    public Node<T> getRoot() {
29
+    Node<T> getRoot() {
68 30
         return root;
69 31
     }
70 32
 
@@ -119,4 +81,36 @@ public class BinarySearchTree<T extends Comparable<T>> {
119 81
             }
120 82
         }
121 83
     }
84
+
85
+    static class Node<T> {
86
+
87
+        private T data;
88
+        private Node<T> left = null;
89
+        private Node<T> right = null;
90
+
91
+        Node(T data) {
92
+            this.data = data;
93
+        }
94
+
95
+        Node<T> getLeft() {
96
+            return left;
97
+        }
98
+
99
+        void setLeft(Node<T> left) {
100
+            this.left = left;
101
+        }
102
+
103
+        Node<T> getRight() {
104
+            return right;
105
+        }
106
+
107
+        void setRight(Node<T> right) {
108
+            this.right = right;
109
+        }
110
+
111
+        T getData() {
112
+            return data;
113
+        }
114
+
115
+    }
122 116
 }

+ 35
- 0
exercises/binary-search-tree/src/main/java/BinarySearchTree.java Просмотреть файл

@@ -0,0 +1,35 @@
1
+import java.util.List;
2
+
3
+class BinarySearchTree<T extends Comparable<T>> {
4
+    void insert(T value) {
5
+        throw new UnsupportedOperationException("Delete this statement and write your own implementation.");
6
+    }
7
+
8
+    List<T> getAsSortedList() {
9
+        throw new UnsupportedOperationException("Delete this statement and write your own implementation.");
10
+    }
11
+
12
+    List<T> getAsLevelOrderList() {
13
+        throw new UnsupportedOperationException("Delete this statement and write your own implementation.");
14
+    }
15
+
16
+    Node<T> getRoot() {
17
+        throw new UnsupportedOperationException("Delete this statement and write your own implementation.");
18
+    }
19
+
20
+    static class Node<T> {
21
+
22
+        Node<T> getLeft() {
23
+            throw new UnsupportedOperationException("Delete this statement and write your own implementation.");
24
+        }
25
+
26
+        Node<T> getRight() {
27
+            throw new UnsupportedOperationException("Delete this statement and write your own implementation.");
28
+        }
29
+
30
+        T getData() {
31
+            throw new UnsupportedOperationException("Delete this statement and write your own implementation.");
32
+        }
33
+
34
+    }
35
+}

+ 46
- 40
exercises/binary-search-tree/src/test/java/BinarySearchTreeTest.java Просмотреть файл

@@ -9,39 +9,38 @@ import org.junit.Test;
9 9
 import org.junit.Before;
10 10
 
11 11
 public class BinarySearchTreeTest {
12
-    private BinarySearchTree<Integer> binarySearchTree;
13
-
14
-    @Before
15
-    public void setUp() {
16
-        binarySearchTree = new BinarySearchTree<>();
17
-    }
18 12
 
19 13
     @Test
20 14
     public void dataIsRetained() {
21
-        final int actual = 4;
22
-        binarySearchTree.insert(actual);
15
+        BinarySearchTree<Integer> binarySearchTree = new BinarySearchTree<>();
16
+
17
+        final int expected = 4;
18
+        binarySearchTree.insert(expected);
19
+
23 20
         final BinarySearchTree.Node<Integer> root = binarySearchTree.getRoot();
24 21
         assertNotNull(root);
25
-        final int expected = root.getData();
22
+
23
+        final int actual = root.getData();
26 24
         assertEquals(expected, actual);
27 25
     }
28 26
 
29 27
     @Ignore("Remove to run test")
30 28
     @Test
31 29
     public void insertsLess() {
32
-        final int expectedRoot = 4;
33
-        final int expectedLeft = 2;
30
+        BinarySearchTree<Character> binarySearchTree = new BinarySearchTree<>();
31
+        final char expectedRoot = '4';
32
+        final char expectedLeft = '2';
34 33
 
35 34
         binarySearchTree.insert(expectedRoot);
36 35
         binarySearchTree.insert(expectedLeft);
37 36
 
38
-        final BinarySearchTree.Node<Integer> root = binarySearchTree.getRoot();
37
+        final BinarySearchTree.Node<Character> root = binarySearchTree.getRoot();
39 38
         assertNotNull(root);
40
-        final BinarySearchTree.Node<Integer> left = root.getLeft();
39
+        final BinarySearchTree.Node<Character> left = root.getLeft();
41 40
         assertNotNull(left);
42 41
 
43
-        final int actualRoot = root.getData();
44
-        final int actualLeft = left.getData();
42
+        final char actualRoot = root.getData();
43
+        final char actualLeft = left.getData();
45 44
         assertEquals(expectedLeft, actualLeft);
46 45
         assertEquals(expectedRoot, actualRoot);
47 46
     }
@@ -49,19 +48,20 @@ public class BinarySearchTreeTest {
49 48
     @Ignore("Remove to run test")
50 49
     @Test
51 50
     public void insertsSame() {
52
-        final int expectedRoot = 4;
53
-        final int expectedLeft = 4;
51
+        BinarySearchTree<String> binarySearchTree = new BinarySearchTree<>();
52
+        final String expectedRoot = "4";
53
+        final String expectedLeft = "4";
54 54
 
55 55
         binarySearchTree.insert(expectedRoot);
56 56
         binarySearchTree.insert(expectedLeft);
57 57
 
58
-        final BinarySearchTree.Node<Integer> root = binarySearchTree.getRoot();
58
+        final BinarySearchTree.Node<String> root = binarySearchTree.getRoot();
59 59
         assertNotNull(root);
60
-        final BinarySearchTree.Node<Integer> left = root.getLeft();
60
+        final BinarySearchTree.Node<String> left = root.getLeft();
61 61
         assertNotNull(left);
62 62
 
63
-        final int actualRoot = root.getData();
64
-        final int actualLeft = left.getData();
63
+        final String actualRoot = root.getData();
64
+        final String actualLeft = left.getData();
65 65
         assertEquals(expectedLeft, actualLeft);
66 66
         assertEquals(expectedRoot, actualRoot);
67 67
     }
@@ -69,6 +69,7 @@ public class BinarySearchTreeTest {
69 69
     @Ignore("Remove to run test")
70 70
     @Test
71 71
     public void insertsRight() {
72
+        BinarySearchTree<Integer> binarySearchTree = new BinarySearchTree<>();
72 73
         final int expectedRoot = 4;
73 74
         final int expectedRight = 5;
74 75
 
@@ -89,35 +90,38 @@ public class BinarySearchTreeTest {
89 90
     @Ignore("Remove to run test")
90 91
     @Test
91 92
     public void createsComplexTree() {
92
-        List<Integer> expected = Collections.unmodifiableList(
93
-                Arrays.asList(4, 2, 6, 1, 3, 5, 7)
93
+        BinarySearchTree<Character> binarySearchTree = new BinarySearchTree<>();
94
+        List<Character> expected = Collections.unmodifiableList(
95
+                Arrays.asList('4', '2', '6', '1', '3', '5', '7')
94 96
         );
95 97
 
96
-        List<Integer> treeData = Collections.unmodifiableList(
97
-                Arrays.asList(4, 2, 6, 1, 3, 7, 5)
98
+        List<Character> treeData = Collections.unmodifiableList(
99
+                Arrays.asList('4', '2', '6', '1', '3', '7', '5')
98 100
         );
99 101
         treeData.forEach(binarySearchTree::insert);
100 102
 
101
-        List<Integer> actual = binarySearchTree.getAsLevelOrderList();
103
+        List<Character> actual = binarySearchTree.getAsLevelOrderList();
102 104
         assertEquals(expected, actual);
103 105
     }
104 106
 
105 107
     @Ignore("Remove to run test")
106 108
     @Test
107 109
     public void sortsSingleElement() {
108
-        List<Integer> expected = Collections.unmodifiableList(
109
-                Collections.singletonList(4)
110
+        BinarySearchTree<String> binarySearchTree = new BinarySearchTree<>();
111
+        List<String> expected = Collections.unmodifiableList(
112
+                Collections.singletonList("4")
110 113
         );
111 114
 
112
-        binarySearchTree.insert(4);
115
+        binarySearchTree.insert("4");
113 116
 
114
-        List<Integer> actual = binarySearchTree.getAsSortedList();
117
+        List<String> actual = binarySearchTree.getAsSortedList();
115 118
         assertEquals(expected, actual);
116 119
     }
117 120
 
118 121
     @Ignore("Remove to run test")
119 122
     @Test
120 123
     public void sortsCollectionOfTwoIfSecondInsertedIsSmallerThanFirst() {
124
+        BinarySearchTree<Integer> binarySearchTree = new BinarySearchTree<>();
121 125
         List<Integer> expected = Collections.unmodifiableList(
122 126
                 Arrays.asList(2, 4)
123 127
         );
@@ -132,30 +136,32 @@ public class BinarySearchTreeTest {
132 136
     @Ignore("Remove to run test")
133 137
     @Test
134 138
     public void sortsCollectionOfTwoIfSecondInsertedIsBiggerThanFirst() {
135
-        List<Integer> expected = Collections.unmodifiableList(
136
-                Arrays.asList(4, 5)
139
+        BinarySearchTree<Character> binarySearchTree = new BinarySearchTree<>();
140
+        List<Character> expected = Collections.unmodifiableList(
141
+                Arrays.asList('4', '5')
137 142
         );
138 143
 
139
-        binarySearchTree.insert(4);
140
-        binarySearchTree.insert(5);
144
+        binarySearchTree.insert('4');
145
+        binarySearchTree.insert('5');
141 146
 
142
-        List<Integer> actual = binarySearchTree.getAsSortedList();
147
+        List<Character> actual = binarySearchTree.getAsSortedList();
143 148
         assertEquals(expected, actual);
144 149
     }
145 150
 
146 151
     @Ignore("Remove to run test")
147 152
     @Test
148 153
     public void iteratesOverComplexTree() {
149
-        List<Integer> expected = Collections.unmodifiableList(
150
-                Arrays.asList(1, 2, 3, 4, 5, 6, 7)
154
+        BinarySearchTree<String> binarySearchTree = new BinarySearchTree<>();
155
+        List<String> expected = Collections.unmodifiableList(
156
+                Arrays.asList("1", "2", "3", "4", "5", "6", "7")
151 157
         );
152 158
 
153
-        List<Integer> treeData = Collections.unmodifiableList(
154
-                Arrays.asList(4, 2, 1, 3, 6, 7, 5)
159
+        List<String> treeData = Collections.unmodifiableList(
160
+                Arrays.asList("4", "2", "1", "3", "6", "7", "5")
155 161
         );
156 162
         treeData.forEach(binarySearchTree::insert);
157 163
 
158
-        List<Integer> actual = binarySearchTree.getAsSortedList();
164
+        List<String> actual = binarySearchTree.getAsSortedList();
159 165
         assertEquals(expected, actual);
160 166
     }
161 167
 }