I have a perfect binary tree, i.e. each node in the tree is either a leaf node, or has two children, and all leaf nodes are on the same level. Each node has an index in depth-first order.
(E.g. in a tree with 3 levels the root node has index 0, the first child has 1, the first child of the first child has 2, the second child of the first child has 3, the second child has 4, the first child of the second child has 5, the second child of the second child has index 6.
0
/ \
1 4
/ \ / \
2 3 5 6
)
I know the size of tree (number of nodes/maximum level), but only the index of a particular node, and I need to calculate its level (i.e. its distance to the rootnode). How do I do this most efficiently?
let
ibe the index you are looking for andnbe the total number of nodes.This algorithm do what you want:
0 is the index of the root, if
i = 0then you are at the good level, else you can remove the root and you obtain two subtreesn = (n-1)/2updates the number of nodes is the new tree (which is a subtree of the old one) andi = i%nselects only the good subtree.