有没有一种方法可以通过其标签以数学方式计算节点的前置变量?

时间:2019-03-25 22:19:27

标签: binary-tree

有一个按位函数可以计算深度为 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)
  • 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)
} 

0 个答案:

没有答案