@@ -27,6 +27,235 @@ The leaves are not drawn.
27
27
28
28
![ Binary Search Tree] ( https://upload.wikimedia.org/wikipedia/commons/d/da/Binary_search_tree.svg )
29
29
30
+ ## Pseudocode for Basic Operations
31
+
32
+ ### Insertion
33
+
34
+ ``` text
35
+ insert(value)
36
+ Pre: value has passed custom type checks for type T
37
+ Post: value has been placed in the correct location in the tree
38
+ if root = ø
39
+ root ← node(value)
40
+ else
41
+ insertNode(root, value)
42
+ end if
43
+ end insert
44
+ ```
45
+
46
+ ``` text
47
+ insertNode(current, value)
48
+ Pre: current is the node to start from
49
+ Post: value has been placed in the correct location in the tree
50
+ if value < current.value
51
+ if current.left = ø
52
+ current.left ← node(value)
53
+ else
54
+ InsertNode(current.left, value)
55
+ end if
56
+ else
57
+ if current.right = ø
58
+ current.right ← node(value)
59
+ else
60
+ InsertNode(current.right, value)
61
+ end if
62
+ end if
63
+ end insertNode
64
+ ```
65
+
66
+ ### Searching
67
+
68
+ ``` text
69
+ contains(root, value)
70
+ Pre: root is the root node of the tree, value is what we would like to locate
71
+ Post: value is either located or not
72
+ if root = ø
73
+ return false
74
+ end if
75
+ if root.value = value
76
+ return true
77
+ else if value < root.value
78
+ return contains(root.left, value)
79
+ else
80
+ return contains(root.right, value)
81
+ end if
82
+ end contains
83
+ ```
84
+
85
+
86
+ ### Deletion
87
+
88
+ ``` text
89
+ remove(value)
90
+ Pre: value is the value of the node to remove, root is the node of the BST
91
+ count is the number of items in the BST
92
+ Post: node with value is removed if found in which case yields true, otherwise false
93
+ nodeToRemove ← findNode(value)
94
+ if nodeToRemove = ø
95
+ return false
96
+ end if
97
+ parent ← findParent(value)
98
+ if count = 1
99
+ root ← ø
100
+ else if nodeToRemove.left = ø and nodeToRemove.right = ø
101
+ if nodeToRemove.value < parent.value
102
+ parent.left ← nodeToRemove.right
103
+ else
104
+ parent.right ← nodeToRemove.right
105
+ end if
106
+ else if nodeToRemove.left = ø and nodeToRemove.right = ø
107
+ if nodeToRemove.value < parent.value
108
+ parent.left ← nodeToRemove.left
109
+ else
110
+ parent.right ← nodeToRemove.left
111
+ end if
112
+ else
113
+ largestValue ← nodeToRemove.left
114
+ while largestValue.right = ø
115
+ largestValue ← largestValue.right
116
+ end while
117
+ findParent(largestValue.value).right ← ø
118
+ nodeToRemove.value ← largestValue.value
119
+ end if
120
+ count ← count - 1
121
+ return true
122
+ end remove
123
+ ```
124
+
125
+ ### Find Parent of Node
126
+
127
+ ``` text
128
+ findParent(value, root)
129
+ Pre: value is the value of the node we want to find the parent of
130
+ root is the root node of the BST and is != ø
131
+ Post: a reference to the prent node of value if found; otherwise ø
132
+ if value = root.value
133
+ return ø
134
+ end if
135
+ if value < root.value
136
+ if root.left = ø
137
+ return ø
138
+ else if root.left.value = value
139
+ return root
140
+ else
141
+ return findParent(value, root.left)
142
+ end if
143
+ else
144
+ if root.right = ø
145
+ return ø
146
+ else if root.right.value = value
147
+ return root
148
+ else
149
+ return findParent(value, root.right)
150
+ end if
151
+ end if
152
+ end findParent
153
+ ```
154
+
155
+ ### Find Node
156
+
157
+ ``` text
158
+ findNode(root, value)
159
+ Pre: value is the value of the node we want to find the parent of
160
+ root is the root node of the BST
161
+ Post: a reference to the node of value if found; otherwise ø
162
+ if root = ø
163
+ return ø
164
+ end if
165
+ if root.value = value
166
+ return root
167
+ else if value < root.value
168
+ return findNode(root.left, value)
169
+ else
170
+ return findNode(root.right, value)
171
+ end if
172
+ end findNode
173
+ ```
174
+
175
+ ### Find Minimum
176
+
177
+ ``` text
178
+ findMin(root)
179
+ Pre: root is the root node of the BST
180
+ root = ø
181
+ Post: the smallest value in the BST is located
182
+ if root.left = ø
183
+ return root.value
184
+ end if
185
+ findMin(root.left)
186
+ end findMin
187
+ ```
188
+
189
+ ### Find Maximum
190
+
191
+ ``` text
192
+ findMax(root)
193
+ Pre: root is the root node of the BST
194
+ root = ø
195
+ Post: the largest value in the BST is located
196
+ if root.right = ø
197
+ return root.value
198
+ end if
199
+ findMax(root.right)
200
+ end findMax
201
+ ```
202
+
203
+ ### Traversal
204
+
205
+ #### InOrder Traversal
206
+
207
+ ``` text
208
+ inorder(root)
209
+ Pre: root is the root node of the BST
210
+ Post: the nodes in the BST have been visited in inorder
211
+ if root = ø
212
+ inorder(root.left)
213
+ yield root.value
214
+ inorder(root.right)
215
+ end if
216
+ end inorder
217
+ ```
218
+
219
+ #### PreOrder Traversal
220
+
221
+ ``` text
222
+ preorder(root)
223
+ Pre: root is the root node of the BST
224
+ Post: the nodes in the BST have been visited in preorder
225
+ if root = ø
226
+ yield root.value
227
+ preorder(root.left)
228
+ preorder(root.right)
229
+ end if
230
+ end preorder
231
+ ```
232
+
233
+ #### PostOrder Traversal
234
+
235
+ ``` text
236
+ postorder(root)
237
+ Pre: root is the root node of the BST
238
+ Post: the nodes in the BST have been visited in postorder
239
+ if root = ø
240
+ postorder(root.left)
241
+ postorder(root.right)
242
+ yield root.value
243
+ end if
244
+ end postorder
245
+ ```
246
+
247
+ ## Complexities
248
+
249
+ ### Time Complexity
250
+
251
+ | Access | Search | Insertion | Deletion |
252
+ | :-------: | :-------: | :-------: | :-------: |
253
+ | O(log(n)) | O(log(n)) | O(log(n)) | O(log(n)) |
254
+
255
+ ### Space Complexity
256
+
257
+ O(n)
258
+
30
259
## References
31
260
32
261
- [ Wikipedia] ( https://en.wikipedia.org/wiki/Binary_search_tree )
0 commit comments