@@ -10,6 +10,8 @@ import (
1010func BuildTreeFromFiles (files []* models.File ) * Node [models.File ] {
1111 root := & Node [models.File ]{}
1212
13+ childrenMapsByNode := make (map [* Node [models.File ]]map [string ]* Node [models.File ])
14+
1315 var curr * Node [models.File ]
1416 for _ , file := range files {
1517 splitPath := split (file .Name )
@@ -23,11 +25,19 @@ func BuildTreeFromFiles(files []*models.File) *Node[models.File] {
2325 }
2426
2527 path := join (splitPath [:i + 1 ])
26- for _ , existingChild := range curr .Children {
27- if existingChild .Path == path {
28- curr = existingChild
29- continue outer
30- }
28+
29+ var currNodeChildrenMap map [string ]* Node [models.File ]
30+ var isCurrNodeMapped bool
31+
32+ if currNodeChildrenMap , isCurrNodeMapped = childrenMapsByNode [curr ]; ! isCurrNodeMapped {
33+ currNodeChildrenMap = make (map [string ]* Node [models.File ])
34+ childrenMapsByNode [curr ] = currNodeChildrenMap
35+ }
36+
37+ child , doesCurrNodeHaveChildAlready := currNodeChildrenMap [path ]
38+ if doesCurrNodeHaveChildAlready {
39+ curr = child
40+ continue outer
3141 }
3242
3343 newChild := & Node [models.File ]{
@@ -36,6 +46,8 @@ func BuildTreeFromFiles(files []*models.File) *Node[models.File] {
3646 }
3747 curr .Children = append (curr .Children , newChild )
3848
49+ currNodeChildrenMap [path ] = newChild
50+
3951 curr = newChild
4052 }
4153 }
0 commit comments