@@ -27,6 +27,206 @@ 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
31
+
32
+ ### Insertion
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
43
+
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
59
+
60
+ ### Searching
61
+
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
76
+
77
+ ### Deletion
78
+
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
113
+
114
+ ### 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
140
+
141
+ ### 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
157
+
158
+ ### 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
+
169
+
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
180
+
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
+
214
+
215
+ ## Big O
216
+
217
+ ### Time Complexity
218
+
219
+ Access: O(log(n))
220
+ Search: O(log(n))
221
+ Insert: O(log(n))
222
+ Delete: O(log(n))
223
+
224
+
225
+ ### Space Complexity
226
+
227
+ O(n)
228
+
229
+
30
230
## References
31
231
32
232
- [ Wikipedia] ( https://en.wikipedia.org/wiki/Binary_search_tree )
0 commit comments