module Tree::Utils::TreeMetricsHandler
Provides utility functions to measure various tree metrics.
Public Instance Methods
@!attribute [r] breadth Breadth of the tree at this node’s level. A single node without siblings has a breadth of 1.
Breadth is defined to be:
- Breadth
-
Number of sibling nodes to this node + 1 (this node itself),
i.e., the number of children the parent of this node has.
@return [Integer] breadth of the node’s level.
# File lib/tree/utils/metrics_methods.rb, line 117 def breadth root? ? 1 : parent.children.size end
@!attribute [r] in_degree
The incoming edge-count of this node.
In-degree is defined as:
- In-degree
-
Number of edges arriving at the node (0 for root, 1 for
all other nodes)
-
In-degree = 0 for a root or orphaned node
-
In-degree = 1 for a node which has a parent
@return [Integer] The in-degree of this node.
# File lib/tree/utils/metrics_methods.rb, line 132 def in_degree root? ? 0 : 1 end
@!attribute [r] length Convenience synonym for {#size}.
@deprecated This method name is ambiguous and may be removed. Use {#size} instead.
@return [Integer] The total number of nodes in this (sub)tree. @see size
# File lib/tree/utils/metrics_methods.rb, line 66 def length size end
@!attribute [r] level Alias for {#node_depth}
@see node_depth
# File lib/tree/utils/metrics_methods.rb, line 104 def level node_depth end
@!attribute [r] node_depth
Depth of this node in its tree. Depth of a node is defined as:
- Depth
-
Length of the node’s path to its root. Depth of a root node is
zero.
{#level} is an alias for this method.
@return [Integer] Depth of this node.
# File lib/tree/utils/metrics_methods.rb, line 94 def node_depth return 0 if root? 1 + parent.node_depth end
@!attribute [r] node_height
Height of the (sub)tree from this node. Height of a node is defined as:
- Height
-
Length of the longest downward path to a leaf from the node.
-
Height from a root node is height of the entire tree.
-
The height of a leaf node is zero.
@return [Integer] Height of the node.
# File lib/tree/utils/metrics_methods.rb, line 79 def node_height return 0 if leaf? 1 + @children.collect(&:node_height).max end
@!attribute [r] out_degree
The outgoing edge-count of this node.
Out-degree is defined as:
- Out-degree
-
Number of edges leaving the node (zero for leafs)
@return [Integer] The out-degree of this node.
# File lib/tree/utils/metrics_methods.rb, line 143 def out_degree leaf? ? 0 : children.size end
@!attribute [r] size Total number of nodes in this (sub)tree, including this node.
Size of the tree is defined as:
- Size
-
Total number nodes in the subtree including this node.
@return [Integer] Total number of nodes in this (sub)tree.
# File lib/tree/utils/metrics_methods.rb, line 54 def size inject(0) { |sum, node| sum + 1 if node } end