Module aptos_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.