一些二叉树结构(例如堆)可以通过从左到右、从上到下设置索引来使用数组来实现
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
还有(???)