module Tree::Utils::TreeMetricsHandler

Provides utility functions to measure various tree metrics.

Public Instance Methods

breadth() click to toggle source

@!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
in_degree() click to toggle source

@!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
length() click to toggle source

@!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
level() click to toggle source

@!attribute [r] level Alias for {#node_depth}

@see node_depth

# File lib/tree/utils/metrics_methods.rb, line 104
def level
  node_depth
end
node_depth() click to toggle source

@!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
node_height() click to toggle source

@!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
out_degree() click to toggle source

@!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
size() click to toggle source

@!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