一些二叉树结构(例如堆)可以通过从左到右、从上到下设置索引来使用数组来实现
           0
      / \
     1 2
   / \ / \
  3 4 5 6
 / \ / \ / \ / \
7 8 9 10 11 12 13 14
       ... ETC。
x可以在 O(1) 中轻松找到索引处节点的子节点和父节点:
左孩子(x)= 2x+1 儿童权利(x) = 2x+2 父母(x)=(x-1)/ 2
但是有没有办法在 O(1) 中找到 x 的最低后代 (即具有最高索引的后代)?例如,在上面的树中, 的最低后代x=0是 14,而 forx=1是10。请注意,对于x=1,如果树中只有 10 个元素,则它应该返回9。
我可以假设我的数组中的元素永远不会超过 2 32 个,因此可以使用位移在 O(1) 中实现2 n 。可能log_2还有(???)