给定二叉树,如果父级为0,则左子级为0,右子级为1.如果父级为1,则左子级为1,右子级为0.树的根为0.查找第k个节点值出现在第N级
我试图以这种方式解决。假设第一级有0
,第二级有01
,第三级有01 - 10
(即上半部分的补码)。
同样在第四级0110 1001
。
现在我如何概括这个解决方案或任何其他方式来解决这个问题?
答案 0 :(得分:3)
为了概括你的想法,你可以编写一个递归过程,给出树的n th 级别的元素列表,因为(就像你说的)每个级别都可以获得连接上层及其补充:
getLevel(level)
if level == 0
return [0]
upperLevel = getLevel(level - 1)
return upperLevel + complement(upperLevel)
[...]
是一个列表,+
是列表和complement
更改0
到1
的串联,反之亦然。
有了这个,你只需得到k
生成的列表的getLevel(n)
th 元素。
这可能不是最佳解决方案,它只是建立在你的想法之上(而且很容易)。
答案 1 :(得分:2)
我手动生成前几位,得到了0110100110010110.Google显示这是Thue-Morse sequence。 OEIS中的序列A010060。关于OEIS页面的评论有这一行:
a(n)= S2(n)mod 2,其中S2(n)=基数为2的符号中n,n的数字之和。
此处n
在您的情况下为k
,而您的N
无关紧要。因此,要确定n
中的(n)计算1的数量,并取此总和的最低有效位。