File tree 1 file changed +17
-5
lines changed
1 file changed +17
-5
lines changed Original file line number Diff line number Diff line change @@ -68,12 +68,24 @@ def arrange_nodes(nodes)
68
68
# @param arranged [Hash{Node => {Node => {}, Node => {}}}] arranged nodes
69
69
# @returns [Array[Node]] array of nodes with the parent before the children
70
70
def flatten_arranged_nodes ( arranged )
71
- arranged . inject ( [ ] ) do |sorted_nodes , pair |
72
- node , children = pair
73
- sorted_nodes << node
74
- sorted_nodes += flatten_arranged_nodes ( children ) unless children . blank?
75
- sorted_nodes
71
+ nodes = [ ]
72
+ stack = [ ]
73
+ cur = arranged
74
+ while cur . present? || stack . present?
75
+ node , children = cur . first
76
+ nodes << node
77
+ children = cur . delete ( node )
78
+
79
+ if children . present?
80
+ # work on children, will continue on current node later
81
+ stack . push ( cur ) if cur . present?
82
+ cur = children
83
+ elsif cur . empty?
84
+ # return to remembered node if done processing current children
85
+ cur = stack . pop
86
+ end
76
87
end
88
+ nodes
77
89
end
78
90
79
91
# Arrangement to nested array for serialization
You can’t perform that action at this time.
0 commit comments