Module: Tree::Utils::TreeMetricsHandler

Included in:
TreeNode
Defined in:
lib/tree/utils/metrics_methods.rb

Overview

Provides utility functions to measure various tree metrics.

Instance Attribute Summary (collapse)

Instance Attribute Details

- (Integer) breadth (readonly)

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.

Returns:

  • (Integer)

    breadth of the node's level.



147
148
149
# File 'lib/tree/utils/metrics_methods.rb', line 147

def breadth
  is_root? ? 1 : parent.children.size
end

- (Integer) depth (readonly)

Deprecated.

This method returns an incorrect value. Use the

Depth of the tree from this node. A single leaf node has a depth of 1.

This method is DEPRECATED and may be removed in the subsequent releases. Note that the value returned by this method is actually the:

height + 1 of the node, NOT the depth.

For correct and conventional behavior, please use #node_depth and #node_height methods instead.

#node_depth method instead.

Returns:

  • (Integer)

    depth of the node.

See Also:



129
130
131
132
133
134
135
136
# File 'lib/tree/utils/metrics_methods.rb', line 129

def depth
  warn DeprecatedMethodWarning,
       "This method is deprecated.  "\
       "Please use node_depth() or node_height() instead (bug # 22535)"

  return 1 if is_leaf?
  1 + @children.collect { |child| child.depth }.max
end

- (Integer) in_degree (readonly)

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

Returns:

  • (Integer)

    The in-degree of this node.



162
163
164
# File 'lib/tree/utils/metrics_methods.rb', line 162

def in_degree
  is_root? ? 0 : 1
end

- (Integer) length (readonly)

Deprecated.

This method name is ambiguous and may be removed. Use

Convenience synonym for #size.

#size instead.

Returns:

  • (Integer)

    The total number of nodes in this (sub)tree.

See Also:



68
69
70
# File 'lib/tree/utils/metrics_methods.rb', line 68

def length
  size()
end

- (Object) level (readonly)

Alias for #node_depth

See Also:



108
109
110
# File 'lib/tree/utils/metrics_methods.rb', line 108

def level
  node_depth
end

- (Integer) node_depth (readonly)

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.

Note that the deprecated method #depth was incorrectly computing this value. Please replace all calls to the old method with #node_depth instead.

#level is an alias for this method.

Returns:

  • (Integer)

    Depth of this node.



99
100
101
102
# File 'lib/tree/utils/metrics_methods.rb', line 99

def node_depth
  return 0 if is_root?
  1 + parent.node_depth
end

- (Integer) node_height (readonly)

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.

Returns:

  • (Integer)

    Height of the node.



81
82
83
84
# File 'lib/tree/utils/metrics_methods.rb', line 81

def node_height
  return 0 if is_leaf?
  1 + @children.collect { |child| child.node_height }.max
end

- (Integer) out_degree (readonly)

The outgoing edge-count of this node.

Out-degree is defined as:

Out-degree

Number of edges leaving the node (zero for leafs)

Returns:

  • (Integer)

    The out-degree of this node.



173
174
175
# File 'lib/tree/utils/metrics_methods.rb', line 173

def out_degree
  is_leaf? ? 0 : children.size
end

- (Integer) size (readonly)

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.

Returns:

  • (Integer)

    Total number of nodes in this (sub)tree.



56
57
58
# File 'lib/tree/utils/metrics_methods.rb', line 56

def size
  inject(0) {|sum, node| sum + 1 if node}
end