Skip to content

Commit a6f966f

Browse files
committed
Add each_level method
1 parent db48c35 commit a6f966f

1 file changed

Lines changed: 22 additions & 0 deletions

File tree

lib/tree.rb

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -767,6 +767,28 @@ def each_leaf &block
767767
end
768768
end
769769

770+
# Yields every level of the (sub)tree rooted at this node to the
771+
# specified block.
772+
#
773+
# Will yield this node as well since it is considered the first level.
774+
#
775+
# @yieldparam level [Array<Tree::TreeNode>] All nodes in the level
776+
#
777+
# @return [Tree::TreeNode] this node, if a block if given
778+
# @return [Enumerator] an enumerator on this tree, if a block is *not* given
779+
def each_level &block
780+
if block_given?
781+
level = [self]
782+
until level.empty?
783+
yield level
784+
level = level.map(&:children).flatten
785+
end
786+
return self
787+
else
788+
self.each
789+
end
790+
end
791+
770792
# @!endgroup
771793

772794
# @!group Navigating the Child Nodes

0 commit comments

Comments
 (0)