Module diem_types::proof::position

source ·
Expand description

This module provides an abstraction for positioning a node in a binary tree, A Position uniquely identifies the location of a node

In this implementation, Position is represented by the in-order-traversal sequence number of the node. The process of locating a node and jumping between nodes is done through in-order position calculation, which can be done with bit manipulation.

For example

     3
    /  \
   /    \
  1      5 <-[Node index, a.k.a, Position]
 / \    / \
0   2  4   6

0   1  2   3 <[Leaf index]

Note1: The in-order-traversal counts from 0 Note2: The level of tree counts from leaf level, start from 0 Note3: The leaf index starting from left-most leaf, starts from 0

Structs

  • AncestorIterator generates current position and moves itself to its parent position for each iteration.
  • AncestorSiblingIterator generates current sibling position and moves itself to its parent position for each iteration.
  • Traverse leaves from left to right in groups that forms full subtrees, yielding root positions of such subtrees. Note that each 1-bit in num_leaves corresponds to a full subtree. For example, in the below tree of 5=0b101 leaves, the two 1-bits corresponds to Fzn2 and L4 accordingly.
  • Given an accumulator of size current_num_leaves, FrozenSubtreeSiblingIterator yields the positions of required subtrees if we want to append these subtrees to the existing accumulator to generate a bigger one of size new_num_leaves.

Enums

Functions

  • Given node, an index in an in-order traversal of a perfect binary tree, what order would the node be visited in in post-order traversal? For example, consider this tree of in-order nodes.