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