在二叉树的第N级找到第k个节点

时间:2012-12-18 18:03:09

标签: algorithm binary-tree

  

可能重复:
  K-th element in a heap tree

给定二叉树,如果父级为0,则左子级为0,右子级为1.如果父级为1,则左子级为1,右子级为0.树的根为0.查找第k个节点值出现在第N级

我试图以这种方式解决。假设第一级有0,第二级有01,第三级有01 - 10(即上半部分的补码)。
同样在第四级0110 1001

现在我如何概括这个解决方案或任何其他方式来解决这个问题?

2 个答案:

答案 0 :(得分:3)

为了概括你的想法,你可以编写一个递归过程,给出树的n th 级别的元素列表,因为(就像你说的)每个级别都可以获得连接上层及其补充:

getLevel(level)

  if level == 0
    return [0]

  upperLevel = getLevel(level - 1)

  return upperLevel + complement(upperLevel)

[...]是一个列表,+是列表和complement更改01的串联,反之亦然。

有了这个,你只需得到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的数量,并取此总和的最低有效位。