Pārlūkot izejas kodu

Merge pull request #952 from FridaTveit/BinarySearchTreeUseGenerics

binary-search-tree: use generics
Stuart Kent 9 gadus atpakaļ
vecāks
revīzija
e1a93578c1

+ 38
- 44
exercises/binary-search-tree/.meta/src/reference/java/BinarySearchTree.java Parādīt failu

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
     private Node<T> root;
5
     private Node<T> root;
43
-
44
     private int nodeCount = 0;
6
     private int nodeCount = 0;
45
 
7
 
46
-    public void insert(T value) {
8
+    void insert(T value) {
47
         if (root == null) {
9
         if (root == null) {
48
             root = new Node<>(value);
10
             root = new Node<>(value);
49
         } else {
11
         } else {
52
         this.nodeCount++;
14
         this.nodeCount++;
53
     }
15
     }
54
 
16
 
55
-    public List<T> getAsSortedList() {
17
+    List<T> getAsSortedList() {
56
         List<T> result = new ArrayList<>(this.nodeCount);
18
         List<T> result = new ArrayList<>(this.nodeCount);
57
         this.putInSortedOrderToList(this.root, result);
19
         this.putInSortedOrderToList(this.root, result);
58
         return Collections.unmodifiableList(result);
20
         return Collections.unmodifiableList(result);
59
     }
21
     }
60
 
22
 
61
-    public List<T> getAsLevelOrderList() {
23
+    List<T> getAsLevelOrderList() {
62
         List<T> result = new ArrayList<>(this.nodeCount);
24
         List<T> result = new ArrayList<>(this.nodeCount);
63
         this.putInLevelOrderToList(this.root, result);
25
         this.putInLevelOrderToList(this.root, result);
64
         return Collections.unmodifiableList(result);
26
         return Collections.unmodifiableList(result);
65
     }
27
     }
66
 
28
 
67
-    public Node<T> getRoot() {
29
+    Node<T> getRoot() {
68
         return root;
30
         return root;
69
     }
31
     }
70
 
32
 
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 Parādīt failu

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 Parādīt failu

9
 import org.junit.Before;
9
 import org.junit.Before;
10
 
10
 
11
 public class BinarySearchTreeTest {
11
 public class BinarySearchTreeTest {
12
-    private BinarySearchTree<Integer> binarySearchTree;
13
-
14
-    @Before
15
-    public void setUp() {
16
-        binarySearchTree = new BinarySearchTree<>();
17
-    }
18
 
12
 
19
     @Test
13
     @Test
20
     public void dataIsRetained() {
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
         final BinarySearchTree.Node<Integer> root = binarySearchTree.getRoot();
20
         final BinarySearchTree.Node<Integer> root = binarySearchTree.getRoot();
24
         assertNotNull(root);
21
         assertNotNull(root);
25
-        final int expected = root.getData();
22
+
23
+        final int actual = root.getData();
26
         assertEquals(expected, actual);
24
         assertEquals(expected, actual);
27
     }
25
     }
28
 
26
 
29
     @Ignore("Remove to run test")
27
     @Ignore("Remove to run test")
30
     @Test
28
     @Test
31
     public void insertsLess() {
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
         binarySearchTree.insert(expectedRoot);
34
         binarySearchTree.insert(expectedRoot);
36
         binarySearchTree.insert(expectedLeft);
35
         binarySearchTree.insert(expectedLeft);
37
 
36
 
38
-        final BinarySearchTree.Node<Integer> root = binarySearchTree.getRoot();
37
+        final BinarySearchTree.Node<Character> root = binarySearchTree.getRoot();
39
         assertNotNull(root);
38
         assertNotNull(root);
40
-        final BinarySearchTree.Node<Integer> left = root.getLeft();
39
+        final BinarySearchTree.Node<Character> left = root.getLeft();
41
         assertNotNull(left);
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
         assertEquals(expectedLeft, actualLeft);
44
         assertEquals(expectedLeft, actualLeft);
46
         assertEquals(expectedRoot, actualRoot);
45
         assertEquals(expectedRoot, actualRoot);
47
     }
46
     }
49
     @Ignore("Remove to run test")
48
     @Ignore("Remove to run test")
50
     @Test
49
     @Test
51
     public void insertsSame() {
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
         binarySearchTree.insert(expectedRoot);
55
         binarySearchTree.insert(expectedRoot);
56
         binarySearchTree.insert(expectedLeft);
56
         binarySearchTree.insert(expectedLeft);
57
 
57
 
58
-        final BinarySearchTree.Node<Integer> root = binarySearchTree.getRoot();
58
+        final BinarySearchTree.Node<String> root = binarySearchTree.getRoot();
59
         assertNotNull(root);
59
         assertNotNull(root);
60
-        final BinarySearchTree.Node<Integer> left = root.getLeft();
60
+        final BinarySearchTree.Node<String> left = root.getLeft();
61
         assertNotNull(left);
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
         assertEquals(expectedLeft, actualLeft);
65
         assertEquals(expectedLeft, actualLeft);
66
         assertEquals(expectedRoot, actualRoot);
66
         assertEquals(expectedRoot, actualRoot);
67
     }
67
     }
69
     @Ignore("Remove to run test")
69
     @Ignore("Remove to run test")
70
     @Test
70
     @Test
71
     public void insertsRight() {
71
     public void insertsRight() {
72
+        BinarySearchTree<Integer> binarySearchTree = new BinarySearchTree<>();
72
         final int expectedRoot = 4;
73
         final int expectedRoot = 4;
73
         final int expectedRight = 5;
74
         final int expectedRight = 5;
74
 
75
 
89
     @Ignore("Remove to run test")
90
     @Ignore("Remove to run test")
90
     @Test
91
     @Test
91
     public void createsComplexTree() {
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
         treeData.forEach(binarySearchTree::insert);
101
         treeData.forEach(binarySearchTree::insert);
100
 
102
 
101
-        List<Integer> actual = binarySearchTree.getAsLevelOrderList();
103
+        List<Character> actual = binarySearchTree.getAsLevelOrderList();
102
         assertEquals(expected, actual);
104
         assertEquals(expected, actual);
103
     }
105
     }
104
 
106
 
105
     @Ignore("Remove to run test")
107
     @Ignore("Remove to run test")
106
     @Test
108
     @Test
107
     public void sortsSingleElement() {
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
         assertEquals(expected, actual);
118
         assertEquals(expected, actual);
116
     }
119
     }
117
 
120
 
118
     @Ignore("Remove to run test")
121
     @Ignore("Remove to run test")
119
     @Test
122
     @Test
120
     public void sortsCollectionOfTwoIfSecondInsertedIsSmallerThanFirst() {
123
     public void sortsCollectionOfTwoIfSecondInsertedIsSmallerThanFirst() {
124
+        BinarySearchTree<Integer> binarySearchTree = new BinarySearchTree<>();
121
         List<Integer> expected = Collections.unmodifiableList(
125
         List<Integer> expected = Collections.unmodifiableList(
122
                 Arrays.asList(2, 4)
126
                 Arrays.asList(2, 4)
123
         );
127
         );
132
     @Ignore("Remove to run test")
136
     @Ignore("Remove to run test")
133
     @Test
137
     @Test
134
     public void sortsCollectionOfTwoIfSecondInsertedIsBiggerThanFirst() {
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
         assertEquals(expected, actual);
148
         assertEquals(expected, actual);
144
     }
149
     }
145
 
150
 
146
     @Ignore("Remove to run test")
151
     @Ignore("Remove to run test")
147
     @Test
152
     @Test
148
     public void iteratesOverComplexTree() {
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
         treeData.forEach(binarySearchTree::insert);
162
         treeData.forEach(binarySearchTree::insert);
157
 
163
 
158
-        List<Integer> actual = binarySearchTree.getAsSortedList();
164
+        List<String> actual = binarySearchTree.getAsSortedList();
159
         assertEquals(expected, actual);
165
         assertEquals(expected, actual);
160
     }
166
     }
161
 }
167
 }