@@ -2,6 +2,19 @@ import BNode from './BinaryTreeNode.ts';
2
2
3
3
4
4
export default class BinarySearchTree {
5
+
6
+ public static traverse ( node : BNode | null ) {
7
+ if ( node === null ) return ;
8
+
9
+ const tree = Object . create ( { } ) ;
10
+ tree . value = node . getValue ( ) ;
11
+ tree . left = node . getLeft ( ) === null ? null : this . traverse ( node . getLeft ( ) ) ;
12
+ tree . right = node . getRight ( ) === null ? null : this . traverse ( node . getRight ( ) ) ;
13
+ return tree ;
14
+ }
15
+
16
+ // ------------------- Instance Code Starts Here -------------------
17
+
5
18
private root : BNode | null ;
6
19
7
20
constructor ( ) {
@@ -172,6 +185,26 @@ export default class BinarySearchTree {
172
185
}
173
186
}
174
187
188
+ public invertTree ( ) : boolean {
189
+ if ( ! this . root ) false ;
190
+ this . _invertNode ( this . root ) ;
191
+ return true ;
192
+ }
193
+
194
+ private _invertNode ( current : BNode | null ) {
195
+ if ( current === null ) return ;
196
+
197
+ this . _swapChildren ( current ) ;
198
+ this . _invertNode ( current . getLeft ( ) ) ;
199
+ this . _invertNode ( current . getRight ( ) ) ;
200
+ }
201
+
202
+ private _swapChildren ( node : BNode ) {
203
+ const left = node . getLeft ( ) ;
204
+ node . setLeft ( node . getRight ( ) ) ;
205
+ node . setRight ( left ) ;
206
+ }
207
+
175
208
public equalsQuantum ( tree : BinarySearchTree ) : boolean {
176
209
return JSON . stringify ( this ) === JSON . stringify ( tree ) ;
177
210
}
@@ -182,16 +215,6 @@ function printNode(tree: BinarySearchTree, value: number): void {
182
215
console . log ( 'Find' , value + ':' , ! ! requestedNode ? JSON . stringify ( requestedNode ) : 'Node not found.' ) ;
183
216
}
184
217
185
- function traverseFrom ( node : BNode | null ) {
186
- if ( node === null ) return ;
187
-
188
- const tree = Object . create ( { } ) ;
189
- tree . value = node . getValue ( ) ;
190
- tree . left = node . getLeft ( ) === null ? null : traverseFrom ( node . getLeft ( ) ) ;
191
- tree . right = node . getRight ( ) === null ? null : traverseFrom ( node . getRight ( ) ) ;
192
- return tree ;
193
- }
194
-
195
218
//---------------------------------------------------------------------
196
219
// ---------- MAIN PROGRAM ----------
197
220
//---------------------------------------------------------------------
@@ -210,12 +233,24 @@ if (import.meta.main) {
210
233
tree . insert ( 170 ) ;
211
234
tree . insert ( 15 ) ;
212
235
tree . insert ( 1 ) ;
213
- console . log ( 'Tree: ' , JSON . stringify ( traverseFrom ( tree . getRoot ( ) ) ) ) ;
236
+ console . log ( 'Tree: ' , JSON . stringify ( BinarySearchTree . traverse ( tree . getRoot ( ) ) ) ) ;
214
237
tree . remove ( 20 ) ;
215
238
printNode ( tree , 4 ) ;
216
239
printNode ( tree , 17 ) ;
217
240
printNode ( tree , 40 ) ;
218
241
printNode ( tree , 170 ) ;
242
+ console . log ( 'Original Tree: ' , JSON . stringify ( BinarySearchTree . traverse ( tree . getRoot ( ) ) ) ) ;
243
+ tree . invertTree ( ) ;
244
+ console . log ( 'Inverse Tree: ' , JSON . stringify ( BinarySearchTree . traverse ( tree . getRoot ( ) ) ) ) ;
219
245
220
246
// RUN: deno run Data-Structures/Trees/BinarySearchTree.ts
221
- }
247
+ }
248
+
249
+ // --------------------------- Terminal Output: ---------------------------
250
+ // Tree: {"value":9,"left":{"value":4,"left":{"value":1,"left":null,"right":null},"right":{"value":6,"left":null,"right":null} },"right":{"value":20,"left":{"value":15,"left":null,"right":null},"right":{"value":170,"left":null,"right":null}} }
251
+ // Find 4: {"value":4,"left":{"value":1,"left":null,"right":null},"right":{"value":6,"left":null,"right":null}}
252
+ // Find 17: Node not found.
253
+ // Find 40: Node not found.
254
+ // Find 170: {"value":170,"left":{"value":15,"left":null,"right":null},"right":null}
255
+ // Original Tree: {"value":9,"left":{"value":4,"left":{"value":1,"left":null,"right":null},"right":{"value":6,"left":null,"right":null} },"right":{"value":170,"left":{"value":15,"left":null,"right":null},"right":null} }
256
+ // Inverse Tree: {"value":9,"left":{"value":170,"left":null,"right":{"value":15,"left":null,"right":null}},"right":{"value":4,"left":{"value":6,"left":null,"right":null},"right":{"value":1,"left":null,"right":null}} }
0 commit comments