一部の二分木構造(ヒープなど)は、インデックスを左から右、上から下に設定することにより、配列を使用して実装できます。
0 / \ 1 2 / \ / \ 3 4 5 6 / \ / \ / \ / \ 7 8 9 10 11 12 13 14 ...など。
インデックスのノードの子と親は、x
O(1)で簡単に見つけることができます。
child-left(x)= 2x + 1 child-right(x)= 2x + 2 親(x)=(x-1)/ 2
しかし、O(1)でxの最も低い子孫 (つまり、インデックスが最も高い子孫)を見つける方法はありますか?たとえば、上のツリーでは、の最下位の子孫はx=0
14になりますが、の場合は。x=1
になります10
。x=1
の場合、ツリーに要素が10個しかない場合は、代わりに戻る必要があることに注意してください9
。
配列に232個を超える要素が存在することはないと想定できるため、ビットシフトを使用して2 nをO(1)に実装できます。おそらくlog_2
同様に(???)