Если я правильно прочитал этот вопрос, вам нужны все индексы одного поколения, а не просто одного и того же родителя.
Индекс i принадлежит полу поколения (база журнала 2 (i + 1)).
index generation
0 0
1 1
2 1
3 2
4 2
5 2
6 2
7 3 etc...
Диапазон индексов, принадлежащих поколению g для g> 0, составляет от (2 ^ g) -1 до (2 ^ (g + 1)) - 2. Это не относится к поколению 0, которое является самим собой.
Затем, чтобы найти индексы-братья для данного индекса:
1. Find its generation
2. Find the range of indices for that generation
3. Eliminate the input index
4. Truncate the range if it extents past the end of the array.
E.g. arr = 1,2,3,4,5,6
X = 5
i = index of 5 = 4.
g = floor(log base 2(5)) = 2
range = 3 through 6.
after eliminating the input and truncating, the valid indices are 3, 5.
values at these indices are 4, 6.