@@ -1647,6 +1647,7 @@ var vm = new _js_vue__WEBPACK_IMPORTED_MODULE_0___default.a({
1647
1647
1648
1648
// Events Handlers
1649
1649
onIntrUpdate ( args ) { // Internal node requests for value update
1650
+ this . update ( ) ;
1650
1651
let node = args [ 0 ] ;
1651
1652
let updation = args [ 1 ] ;
1652
1653
let successMessage = `Change ${ node . data } to ${ updation } ` ;
@@ -1660,8 +1661,10 @@ var vm = new _js_vue__WEBPACK_IMPORTED_MODULE_0___default.a({
1660
1661
node . data = updation ;
1661
1662
this . update ( ) ;
1662
1663
this . messages . left = successMessage ;
1664
+ node . active = true ; // Caution: Mark recent active
1663
1665
} , // TODO: active newly updated node. Update before and after every action.
1664
1666
onExtrInsert ( args ) { // External node requests for value insertion
1667
+ this . update ( ) ;
1665
1668
let node = args [ 0 ] ;
1666
1669
let insertion = args [ 1 ] ;
1667
1670
let curTreeType = this . curTreeType ;
@@ -1678,37 +1681,47 @@ var vm = new _js_vue__WEBPACK_IMPORTED_MODULE_0___default.a({
1678
1681
// check new order
1679
1682
if ( ! this . checkNodeOrder ( node , insertion ) ) return false ;
1680
1683
}
1681
- var updateH ;
1684
+ var updateH , retNode ;
1682
1685
if ( curTreeType === "BinTree" || curTreeType === "BST" )
1683
1686
updateH = true ;
1684
1687
else
1685
1688
updateH = false ;
1686
1689
1687
1690
if ( node . isRoot )
1688
- this . tree . insertAsRoot ( insertion , updateH ) ;
1691
+ retNode = this . tree . insertAsRoot ( insertion , updateH ) ;
1689
1692
else if ( node . isLC )
1690
- this . tree . insertAsLC ( node . parent , insertion , updateH ) ;
1693
+ retNode = this . tree . insertAsLC ( node . parent , insertion , updateH ) ;
1691
1694
else
1692
- this . tree . insertAsRC ( node . parent , insertion , updateH ) ;
1695
+ retNode = this . tree . insertAsRC ( node . parent , insertion , updateH ) ;
1693
1696
1694
1697
if ( curTreeType === "AVL" ) {
1695
1698
this . tree . search ( insertion ) ; // locate _hot
1696
1699
this . tree . solveInsertUnbalance ( ) ; // TODO: change to async
1697
1700
}
1698
1701
this . update ( ) ;
1702
+ console . log ( retNode ) ;
1703
+ retNode . active = true ; // Caution: Mark recent active
1699
1704
this . messages . left = `Insert ${ insertion } ` ;
1700
1705
} ,
1701
1706
checkNodeOrder ( node , newV ) {
1702
1707
let pred , succ ;
1703
1708
let isLC = node . isLC || BinNode . isLC ( node ) ;
1704
- if ( isLC === true && newV > node . parent . data ||
1705
- isLC === true && ( pred = node . parent . pred ( ) ) && newV < pred . data ||
1706
- isLC === false && newV < node . parent . data ||
1707
- isLC === false && ( succ = node . parent . succ ( ) ) && newV > succ . data ||
1708
- node . lc && newV < node . lc . data || node . rc && newV > node . rc . data ) {
1709
- this . alertAsync ( "Must maintain order." , 2500 ) ;
1710
- return false ;
1711
- } return true ;
1709
+ if ( node . lc === undefined ) { // External nodes
1710
+ if ( isLC === true && newV > node . parent . data ||
1711
+ isLC === true && ( pred = node . parent . pred ( ) ) && newV < pred . data ||
1712
+ isLC === false && newV < node . parent . data ||
1713
+ isLC === false && ( succ = node . parent . succ ( ) ) && newV > succ . data ) {
1714
+ this . alertAsync ( "Must maintain order." , 2500 ) ;
1715
+ return false ;
1716
+ }
1717
+ } else { // Internal nodes
1718
+ if ( ( pred = node . pred ( ) ) && newV < pred . data ||
1719
+ ( succ = node . succ ( ) ) && newV > succ . data ) {
1720
+ this . alertAsync ( "Must maintain order." , 2500 ) ;
1721
+ return false ;
1722
+ }
1723
+ }
1724
+ return true ;
1712
1725
} ,
1713
1726
// Remove whole subtree
1714
1727
onRemoveBelow ( node ) {
@@ -1720,10 +1733,8 @@ var vm = new _js_vue__WEBPACK_IMPORTED_MODULE_0___default.a({
1720
1733
onRemoveOne ( node ) {
1721
1734
this . tree . removeAt ( node ) ;
1722
1735
this . tree . _size -- ;
1723
- if ( this . curTreeType === "AVL" ) {
1724
- this . tree . search ( node . data ) ; // locate _hot
1736
+ if ( this . curTreeType === "AVL" ) // BugFixed0305 : _hot already at position after removeAt
1725
1737
this . tree . solveRemoveUnbalance ( ) ;
1726
- }
1727
1738
else if ( 0 ) { }
1728
1739
this . update ( ) ;
1729
1740
this . alertAsync ( `Remove ${ node . data } ` ) ;
@@ -1735,14 +1746,14 @@ var vm = new _js_vue__WEBPACK_IMPORTED_MODULE_0___default.a({
1735
1746
this . tree . buildFromBinSequence ( sequence ) ;
1736
1747
this . update ( ) ;
1737
1748
this . messages . left = "真二叉树层次序列构建" ;
1738
-
1739
1749
this . curTreeClass . checkValidity ( this . tree , ( res , message ) => {
1740
1750
if ( ! res ) this . alertAsync ( message , 3000 ) ;
1741
1751
} )
1742
1752
} ,
1743
1753
// Insert sequence
1744
1754
onTopInsert ( sequence ) {
1745
1755
console . log ( "Insert by sequence" ) ;
1756
+ this . update ( ) ;
1746
1757
this . topSequence = sequence ;
1747
1758
this . insertAsync ( ) ;
1748
1759
} ,
@@ -1752,12 +1763,15 @@ var vm = new _js_vue__WEBPACK_IMPORTED_MODULE_0___default.a({
1752
1763
let num = this . topSequence . shift ( ) ;
1753
1764
this . messages . left = `Insert ${ num } ` ;
1754
1765
this . trvlParams . lock = true ;
1755
- this . searchAsync ( this . tree . root ( ) , num , ( res ) => {
1756
- if ( res ) this . alertAsync ( `${ num } Exists` ) ;
1757
- else { this . tree . insert ( num ) ; this . alertAsync ( `${ num } Inserted` ) ; }
1766
+ this . searchAsync ( this . tree . root ( ) , num , ( res , node ) => {
1767
+ let recentNode = null ;
1768
+ if ( res ) { this . alertAsync ( `${ num } Exists` ) ; recentNode = node ; }
1769
+ else { recentNode = this . tree . insert ( num ) ; this . alertAsync ( `${ num } Inserted` ) ; }
1758
1770
this . update ( ) ;
1759
- this . trvlParams . lock = true ;
1760
- this . insertAsync ( ) ;
1771
+ if ( this . topSequence . length === 0 ) { // Caution: Add another quit check, to fasten last recent active!
1772
+ recentNode . active = true ; // Caution: Mark recent active
1773
+ this . trvlParams . lock = false ; return false ;
1774
+ } else this . insertAsync ( ) ;
1761
1775
} )
1762
1776
} ,
1763
1777
// Search value
@@ -1791,7 +1805,7 @@ var vm = new _js_vue__WEBPACK_IMPORTED_MODULE_0___default.a({
1791
1805
node . active = true ;
1792
1806
if ( num === node . data ) {
1793
1807
this . trvlParams . lock = false ; {
1794
- if ( typeof callback === "function" ) callback ( true ) ;
1808
+ if ( typeof callback === "function" ) callback ( true , node ) ;
1795
1809
return true ;
1796
1810
}
1797
1811
} else {
@@ -1880,9 +1894,8 @@ var vm = new _js_vue__WEBPACK_IMPORTED_MODULE_0___default.a({
1880
1894
} ,
1881
1895
watch : {
1882
1896
tree : {
1883
- handler ( oldV , newV ) {
1897
+ handler ( ) {
1884
1898
console . log ( "Detect Change in tree." ) ;
1885
- // this.update();
1886
1899
} ,
1887
1900
deep : true ,
1888
1901
} ,
0 commit comments