-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathBinarySearchTree.java
More file actions
102 lines (90 loc) · 2.98 KB
/
BinarySearchTree.java
File metadata and controls
102 lines (90 loc) · 2.98 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
public class BinarySearchTree<T> {
class BSTNode { // binary search tree node
Comparable data;
BSTNode left;
BSTNode right;
public BSTNode(Comparable value) {
data = value;
}
}
private BSTNode root;
public boolean find(Comparable value) {
return find(root, value);
}
private boolean find(BSTNode node, Comparable value) {
if (node == null) { // BASE CASE - if value is not in the search tree……. At this point we *could* insert something… look at insert()
return false;
}
if (node.data.compareTo(value) == 0) {
return true;
} else if (node.data.compareTo(value) > 0) {
return find(node.left, value);
} else {
return find(node.right, value);
}
}
public void insert(Comparable value) {
// call shadow function
root = insert(root, value);
}
private BSTNode insert(BSTNode node, Comparable value) {
if (node == null) {
BSTNode newNode = new BSTNode(value);
return newNode;
} else if (node.data.compareTo(value) > 0) {
// insert node on the right
node.left = insert(node.left, value);
} else {
node.right = insert(node.right, value);
}
return node;
}
public void delete(Comparable value) {
root = delete(root, value);
}
private BSTNode delete(BSTNode node, Comparable value) {
if (node == null) {
return null;
}
if (node.data.compareTo(value) == 0) {
if (node.left == null) {
return node.right;
} else if (node.right == null) {
return node.left;
} else { // the node has two children
if (node.right.left == null) {
node.data = node.right.data; // take its data
node.right = node.right.right; // adopt its child
return node;
} else {
node.data = removeSmallest(node.right); // on the right side
return node;
}
}
} else if (node.data.compareTo(value) < 0) {
node.left = delete(node.left, value); // .right may be a cause of error! .data?
} else {
node.right = delete(node.right, value);
}
return node;
}
private Comparable removeSmallest(BSTNode node) {
if (node.left.left == null) { // you have found the smallest thing…
Comparable smallest = node.left.data;
node.left = node.left.right;
return smallest;
} else {
return removeSmallest(node.left);
}
}
public void print() {
print(root);
}
private void print(BSTNode node) {
if (node != null) {
print(node.left);
System.out.println(node.data);
print(node.right);
}
}
}