@@ -39,7 +39,9 @@ export function traverseInOrderCollector(root, collect, level, callbackFn) {
3939export function buildTree ( indexes ) {
4040 const indexesCopy = [ ...indexes ] ;
4141 const root = new Node ( __ROOT_VALUE__ ) ;
42- let nodeCollector = { } ;
42+ let currentLevel = 1 ;
43+ const nodeCollector = { } ;
44+ nodeCollector [ currentLevel ] = [ root ] ;
4345
4446 while ( indexesCopy . length > 0 ) {
4547 nodeCollector = { } ;
@@ -60,19 +62,32 @@ export function buildTree(indexes) {
6062
6163 const levelSize = Math . min (
6264 indexesCopy . length ,
63- nodeCollector [ lastLevel ] ?. length
65+ nodeCollector [ currentLevel ] ?. length
6466 ) ;
67+
68+ const nextLevel = currentLevel + 1 ;
69+
70+ if ( levelSize > 0 ) {
71+ nodeCollector [ nextLevel ] = [ ] ;
72+ }
73+
6574 for ( let i = 0 ; i < levelSize ; i ++ ) {
66- const currentNode = nodeCollector [ lastLevel ] [ i ] ;
75+ const currentNode = nodeCollector [ currentLevel ] [ i ] ;
6776 const newElement = indexesCopy . shift ( ) ;
6877
6978 if ( ( newElement ?. [ 0 ] ?? __LEAF_VALUE__ ) !== __LEAF_VALUE__ ) {
7079 currentNode . left = new Node ( newElement [ 0 ] ) ;
80+ nodeCollector [ nextLevel ] . push ( currentNode . left ) ;
7181 }
7282 if ( ( newElement ?. [ 1 ] ?? __LEAF_VALUE__ ) !== __LEAF_VALUE__ ) {
7383 currentNode . right = new Node ( newElement [ 1 ] ) ;
84+ nodeCollector [ nextLevel ] . push ( currentNode . right ) ;
7485 }
7586 }
87+
88+ if ( nodeCollector [ nextLevel ] . length > 0 ) {
89+ currentLevel = nextLevel ;
90+ }
7691 }
7792
7893 return root ;
0 commit comments