有一个按位函数可以计算深度为 k 的此(标记为)完整二叉树的任何节点的后继节点?
标签是位字符串。对于每个级别 l ,当0> l ≥ k 时, l有2个 l 标签位。在图示中,k = 3。标签的顺序是按字典顺序排列(与二叉树术语中的 preorder 相同)。
使用 bynary-tree数据结构 不可能,该函数必须仅使用标签(!)。后继函数也使用参数 k ,因此它是 s ( x , k )。函数结果的一些示例:
00
== s(0
,3)001
== s(000
,3)1
== s(011
,3)10
== s(1
,3)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)
}