@@ -383,6 +383,22 @@ export default class AVL extends Algorithm {
383383 }
384384 }
385385
386+ compare ( a , b ) {
387+ const numA = parseInt ( a ) ;
388+ const numB = parseInt ( b ) ;
389+
390+ const isNumA = ! isNaN ( numA ) ;
391+ const isNumB = ! isNaN ( numB ) ;
392+
393+ if ( isNumA && isNumB ) {
394+ return numA - numB ;
395+ } else if ( ! isNumA && ! isNumB ) {
396+ return a . localeCompare ( b ) ;
397+ } else {
398+ return isNumA ? - 1 : 1 ;
399+ }
400+ }
401+
386402 add ( data ) {
387403 this . commands = [ ] ;
388404 this . cmd ( act . setText , 0 , ' Inserting ' + data ) ;
@@ -411,15 +427,17 @@ export default class AVL extends Algorithm {
411427 return new AVLNode ( data , treeNodeID , heightLabelID , bfLabelID , 0 , 0 ) ;
412428 }
413429 this . cmd ( act . setHighlight , curr . graphicID , 1 ) ;
414- if ( data < curr . data ) {
430+ // if (data < curr.data) {
431+ if ( this . compare ( data , curr . data ) < 0 ) {
415432 this . cmd ( act . setText , 0 , `${ data } < ${ curr . data } . Looking at left subtree` ) ;
416433 this . cmd ( act . step ) ;
417434 curr . left = this . addH ( data , curr . left ) ;
418435 curr . left . parent = curr ;
419436 this . resizeTree ( ) ;
420437 const connected = this . connectSmart ( curr . graphicID , curr . left . graphicID ) ;
421438 connected && this . cmd ( act . step ) ;
422- } else if ( data > curr . data ) {
439+ // } else if (data > curr.data) {
440+ } else if ( this . compare ( data , curr . data ) > 0 ) {
423441 this . cmd ( act . setText , 0 , `${ data } > ${ curr . data } . Looking at right subtree` ) ;
424442 this . cmd ( act . step ) ;
425443 curr . right = this . addH ( data , curr . right ) ;
@@ -653,7 +671,8 @@ export default class AVL extends Algorithm {
653671 return ;
654672 }
655673 this . cmd ( act . setHighlight , curr . graphicID , 1 ) ;
656- if ( data < curr . data ) {
674+ // if (data < curr.data) {
675+ if ( this . compare ( data , curr . data ) < 0 ) {
657676 this . cmd ( act . setText , 0 , `${ data } < ${ curr . data } . Looking left` ) ;
658677 this . cmd ( act . step ) ;
659678 curr . left = this . removeH ( curr . left , data ) ;
@@ -662,7 +681,8 @@ export default class AVL extends Algorithm {
662681 this . connectSmart ( curr . graphicID , curr . left . graphicID ) ;
663682 this . resizeTree ( ) ;
664683 }
665- } else if ( data > curr . data ) {
684+ // } else if (data > curr.data) {
685+ } else if ( this . compare ( data , curr . data ) < 0 ) {
666686 this . cmd ( act . setText , 0 , `${ data } > ${ curr . data } . Looking right` ) ;
667687 this . cmd ( act . step ) ;
668688 curr . right = this . removeH ( curr . right , data ) ;
0 commit comments