@@ -13,10 +13,12 @@ const canvas = document.getElementById("main-canvas") as HTMLCanvasElement;
1313 private root : number ;
1414 private left : any ;
1515 private right : any ;
16+ private parent : any ;
1617 constructor ( root : number ) {
1718 this . root = root ;
1819 this . left = null ;
1920 this . right = null ;
21+ this . parent = null ;
2022 }
2123
2224 getLeft ( ) {
@@ -28,33 +30,45 @@ const canvas = document.getElementById("main-canvas") as HTMLCanvasElement;
2830 getRoot ( ) {
2931 return this . root ;
3032 }
33+ getParent ( ) {
34+ return this . parent ;
35+ }
3136
3237 setLeft ( node : BinaryTree ) {
3338 this . left = node ;
39+ this . left . setParent ( this ) ;
3440 }
3541 setRight ( node : BinaryTree ) {
3642 this . right = node ;
43+ this . right . setParent ( this ) ;
3744 }
3845 setRoot ( num : number ) {
3946 this . root = num ;
4047 }
48+ setParent ( node : BinaryTree ) {
49+ this . parent = node ;
50+ }
51+
52+ removeChild ( node : BinaryTree ) {
53+ if ( this . left && node . getRoot ( ) === this . left . getRoot ( ) ) {
54+ this . left = null ;
55+ } else if ( this . right && node . getRoot ( ) === this . right . getRoot ( ) ) {
56+ this . right = null ;
57+ }
58+ }
4159
4260 insertLeft ( num : number ) {
4361 if ( this . left === null ) {
4462 this . left = new BinaryTree ( num ) ;
45- } else {
46- const tree = new BinaryTree ( num ) ;
47- tree . left = this . left ;
48- this . left = tree ;
63+
64+ this . left . setParent ( this ) ;
4965 }
5066 }
5167 insertRight ( num : number ) {
5268 if ( this . right === null ) {
5369 this . right = new BinaryTree ( num ) ;
54- } else {
55- const tree = new BinaryTree ( num ) ;
56- tree . right = this . right ;
57- this . right = tree ;
70+
71+ this . right . setParent ( this ) ;
5872 }
5973 }
6074 }
@@ -147,35 +161,40 @@ const canvas = document.getElementById("main-canvas") as HTMLCanvasElement;
147161 }
148162 function insert ( tree : BinaryTree , value : number ) {
149163 if ( value > tree . getRoot ( ) ) {
150- if ( tree . getLeft ( ) === null && tree . getRight ( ) === null ) {
164+ if ( ( tree . getLeft ( ) === null && tree . getRight ( ) === null ) || tree . getRight ( ) === null ) {
151165 tree . insertRight ( value ) ;
152- } else {
153- insert ( tree . getRight ( ) , value )
166+ } else if ( tree . getRight ( ) ) {
167+ insert ( tree . getRight ( ) , value ) ;
154168 }
155169 } else {
156170 if ( tree . getLeft ( ) === null ) {
157171 tree . insertLeft ( value ) ;
158172 } else {
159- insert ( tree . getLeft ( ) , value )
173+ insert ( tree . getLeft ( ) , value ) ;
160174 }
161175 }
162176 }
163- function deepRight ( tree : BinaryTree ) {
164- if ( tree . getRight ( ) ) {
165- return deepRight ( tree . getRight ( ) )
166- } else {
167- return tree . getRoot ( )
168- }
169- }
170177 function remove ( tree : BinaryTree , value : number ) {
171178 if ( tree . getRoot ( ) === value ) {
172- tree . setRoot ( deepRight ( tree ) ) ;
173- } else {
174- if ( tree . getLeft ( ) ) {
175- remove ( tree . getLeft ( ) , value )
179+ if ( tree . getLeft ( ) === null && tree . getRight ( ) === null ) {
180+ tree . getParent ( ) . removeChild ( tree ) ;
181+ } else if ( tree . getLeft ( ) === null && tree . getRight ( ) ) {
182+ tree . setRoot ( tree . getRight ( ) . getRoot ( ) ) ;
183+ tree . removeChild ( tree . getRight ( ) ) ;
184+ } else if ( tree . getRight ( ) == null && tree . getLeft ( ) ) {
185+ tree . setRoot ( tree . getLeft ( ) . getRoot ( ) ) ;
186+ tree . removeChild ( tree . getLeft ( ) ) ;
187+ } else {
188+ let minimum = minRoot ( tree . getRight ( ) )
189+ remove ( tree , minimum ) ;
190+ tree . setRoot ( minimum ) ;
176191 }
192+ } else {
177193 if ( tree . getRight ( ) ) {
178- remove ( tree . getRight ( ) , value )
194+ remove ( tree . getRight ( ) , value ) ;
195+ }
196+ if ( tree . getLeft ( ) ) {
197+ remove ( tree . getLeft ( ) , value ) ;
179198 }
180199 }
181200 }
@@ -247,9 +266,6 @@ const canvas = document.getElementById("main-canvas") as HTMLCanvasElement;
247266
248267 updateTraversals ( tree ) ;
249268
250- console . log ( "MIN" , minRoot ( tree ) ) ;
251- console . log ( "MAX" , maxRoot ( tree ) ) ;
252-
253269 drawTree ( ctx , tree , canvas . width , scale ) ;
254270
255271 var insertNumber = document . getElementById ( 'insert-form-input' ) as HTMLInputElement ;
@@ -258,18 +274,15 @@ const canvas = document.getElementById("main-canvas") as HTMLCanvasElement;
258274 var removeNumber = document . getElementById ( 'remove-form-input' ) as HTMLInputElement ;
259275 var removeNumberForm = document . getElementById ( 'remove-form' ) as HTMLElement ;
260276
261- // if (numberForm.addEventListener){
262-
263- // }
264277 insertNumberForm . addEventListener ( "submit" , function ( ) {
265- console . log ( insertNumber . value ) ;
278+ ctx . clearRect ( 0 , 0 , ctx . canvas . width , ctx . canvas . height ) ;
266279 insert ( tree , parseInt ( insertNumber . value ) )
267280 drawTree ( ctx , tree , canvas . width , scale ) ;
268281 updateTraversals ( tree ) ;
269282 } , false ) ;
270283
271284 removeNumberForm . addEventListener ( "submit" , function ( ) {
272- console . log ( removeNumber . value ) ;
285+ ctx . clearRect ( 0 , 0 , ctx . canvas . width , ctx . canvas . height ) ;
273286 remove ( tree , parseInt ( removeNumber . value ) )
274287 drawTree ( ctx , tree , canvas . width , scale ) ;
275288 updateTraversals ( tree ) ;
0 commit comments