Есть побитовая функция, которая вычисляет преемника любого узла этого (помеченного) полного двоичного дерева глубины k ?
Метки битовые строки . Для каждого уровня l , с 0> l ≥ k , имеется 2 l меток l бит , На иллюстрации k = 3. Порядок меток лексикографический (такой же, как предзаказ в терминологии двоичного дерева).
Можно , а не использовать структуру данных bynary-tree *1027*, функция должна использовать только метку (!). Функция-преемник также использует параметр k , поэтому он равен s ( x , k ). Некоторые примеры результатов функции:
00
== s (0
, 3)
001
== с (000
, 3)
1
== s (011
, 3)
10
== s (1
, 3)
- null == s (
111
, 3)
Это логический вывод, основанный на правилах синтаксиса меток, а не на структуре данных.
Цель - побитовая функция для двоичного представления.
PS: решением может быть ссылка на библиотеку ... на любом языке. Может использовать внутренний двоичный буфер или обычное целое число (например, 64 бита) для меток; можно использовать Javascript, C или любой другой язык ...
Нет проблем с отображением на другое представление метки, если существует простое биективное отношение. Например, мы можем представить метки парой целых чисел (размер, значение)
(size,value) BitString representation
(1,0) 0
(2,0) 00
(3,0) 000
(4,0) 0000
(4,1) 0001
(3,1) 001
(4,2) 0010
(4,3) 0011
(2,1) 01
... ...
Для строк ASCII, конечно, есть «визуальное решение». Экспресс с использованием Javascript:
function s(x,k) {
let l = x.length
if (l<k)
return x+'0';
l--;
if (x[l]=='0')
return x.slice(0,l)+'1'
else
return (x=='1'.padEnd(k,'1'))? null: x.slice(1)
}