@@ -39,7 +39,9 @@ export function traverseInOrderCollector(root, collect, level, callbackFn) {
39
39
export function buildTree ( indexes ) {
40
40
const indexesCopy = [ ...indexes ] ;
41
41
const root = new Node ( __ROOT_VALUE__ ) ;
42
- let nodeCollector = { } ;
42
+ let currentLevel = 1 ;
43
+ const nodeCollector = { } ;
44
+ nodeCollector [ currentLevel ] = [ root ] ;
43
45
44
46
while ( indexesCopy . length > 0 ) {
45
47
nodeCollector = { } ;
@@ -60,19 +62,32 @@ export function buildTree(indexes) {
60
62
61
63
const levelSize = Math . min (
62
64
indexesCopy . length ,
63
- nodeCollector [ lastLevel ] ?. length
65
+ nodeCollector [ currentLevel ] ?. length
64
66
) ;
67
+
68
+ const nextLevel = currentLevel + 1 ;
69
+
70
+ if ( levelSize > 0 ) {
71
+ nodeCollector [ nextLevel ] = [ ] ;
72
+ }
73
+
65
74
for ( let i = 0 ; i < levelSize ; i ++ ) {
66
- const currentNode = nodeCollector [ lastLevel ] [ i ] ;
75
+ const currentNode = nodeCollector [ currentLevel ] [ i ] ;
67
76
const newElement = indexesCopy . shift ( ) ;
68
77
69
78
if ( ( newElement ?. [ 0 ] ?? __LEAF_VALUE__ ) !== __LEAF_VALUE__ ) {
70
79
currentNode . left = new Node ( newElement [ 0 ] ) ;
80
+ nodeCollector [ nextLevel ] . push ( currentNode . left ) ;
71
81
}
72
82
if ( ( newElement ?. [ 1 ] ?? __LEAF_VALUE__ ) !== __LEAF_VALUE__ ) {
73
83
currentNode . right = new Node ( newElement [ 1 ] ) ;
84
+ nodeCollector [ nextLevel ] . push ( currentNode . right ) ;
74
85
}
75
86
}
87
+
88
+ if ( nodeCollector [ nextLevel ] . length > 0 ) {
89
+ currentLevel = nextLevel ;
90
+ }
76
91
}
77
92
78
93
return root ;
0 commit comments