8000 完成B树contains方法并且通过测试。 · ssjssh/javaalgorithm@1c3b78e · GitHub
[go: up one dir, main page]

Skip to content

Commit 1c3b78e

Browse files
author
shengshijun
committed
完成B树contains方法并且通过测试。
1 parent 6c17a06 commit 1c3b78e

File tree

2 files changed

+35
-8
lines changed

2 files changed

+35
-8
lines changed

src/main/java/ssj/algorithm/collections/BTree.java

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -68,11 +68,7 @@ private Tuple2<BTreeNode<T>, BTreeNode<T>> splitNode(BTreeNode<T> node, T insert
6868
right_node.setParent(parent_node);
6969
node.setParent(parent_node);
7070

71-
// System.out.println("parent : " + parent_node);
72-
// System.out.println("insert ele : " + insert_ele);
73-
// System.out.println("middle node : " + node.getValue(node.size() / 2));
7471
int mid_index = parent_node.appendValue(node.getValue(node.size() / 2));
75-
// System.out.println("middle index : " + mid_index);
7672
parent_node.setChild(mid_index - 1, node);
7773
parent_node.setChild(mid_index + 1, right_node);
7874
node.splitNode(right_node);
@@ -108,6 +104,7 @@ public void delete(T ele) {
108104

109105
}
110106

107+
111108
@Override
112109
public T successor(T value) {
113110
return null;
@@ -130,6 +127,13 @@ public T min() {
130127

131128
@Override
132129
public boolean contains(T ele) {
130+
for (BTreeNode<T> cur_node = root; cur_node != null; ) {
131+
if (cur_node.contains(ele)) {
132+
return true;
133+
} else {
134+
cur_node = cur_node.searchChild(ele);
135+
}
136+
}
133137
return false;
134138
}
135139

@@ -324,5 +328,25 @@ public String toString() {
324328
sb.append("]");
325329
return sb.toString();
326330
}
331+
332+
public boolean contains(T value) {
333+
Preconditions.checkNotNull(value);
334+
335+
for (int start = 1, end = size() - 2; start <= end; ) {
336+
int mid = (start + end) / 2;
337+
if (mid % 2 == 0) {
338+
mid--;
339+
}
340+
int com_res = getValue(mid).compareTo(value);
341+
if (com_res == 0) {
342+
return true;
343+
} else if (com_res > 0) {
344+
end = mid - 2;
345+
} else {
346+
start = mid + 2;
347+
}
348+
}
349+
return false;
350+
}
327351
}
328352
}

src/test/java/ssj/algorithm/collections/BTreeTest.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,21 +5,24 @@
55

66
import java.util.Arrays;
77

8+
import static org.junit.Assert.assertEquals;
9+
import static org.junit.Assert.assertTrue;
10+
811
/**
912
* Created by shenshijun on 15/3/7.
1013
*/
1114
public class BTreeTest {
1215
@Test
1316
public void testBasic() {
1417
BTree<Integer> tree = BTree.degreeOf(2);
15-
// int[] data = new int[]{55, 34, 0, 21, 8, 47, 29, 26, 5, 60, 94, 58, 31, 24, 10, 79, 11, 57, 32, 36, 53, 2, 70, 6, 83, 49, 28, 96, 75, 35, 56, 77, 98, 80, 59, 85, 30, 4, 51, 72};
16-
// int[] data = new int[]{55, 34, 0, 21, 8, 47, 29, 26,5, 60, 94,58};
1718
int[] data = MathUtil.randUniqueInt(0, 100000, 400);
18-
System.out.println(Arrays.toString(data));
1919
for (int i : data) {
2020
tree.add(i);
2121
}
22-
tree.size();
22+
assertEquals(tree.size(), data.length);
23+
for (int i : data) {
24+
assertTrue(tree.contains(i));
25+
}
2326
}
2427

2528
}

0 commit comments

Comments
 (0)
0