O(1)在完全二叉树中计算左子项的算法

时间:2017-11-30 22:37:54

标签: algorithm tree

我有一个完整的二叉树(即一个树,其中"每个级别,除了可能是最后一个,完全填充,所有节点尽可能地离开") 。 此树以深度优先,从左到右的顺序存储。我的问题是,给定一个按索引的节点和树的总大小,告诉我该节点的左子树中有多少个节点,在O(1)中。

例如,假设树的总大小为10.这意味着以下完整树(注意:数字是深度优先,从左到右顺序的节点索引):

      0
     / \
    1   7
   / \  |\
  2   5 8 9
 /|  /
3 4 6

现在,给定一个节点索引,我需要找到它有多少个左子节点。对于这个例子:

  • 节点0有6个左孩子。
  • 节点1有3个左孩子。
  • 节点2有1个左子。
  • 节点3有0个左子女。
  • 节点4有0个左子女。
  • 节点5有1个左孩子。
  • 节点6有0个左子女。
  • 节点7有1个左孩子。
  • 节点8有0个左子女。
  • 节点9有0个左子女。

每个这样的查询必须花费O(1)时间并且只是节点索引和树大小的函数(例如,我不能在树中存储任何内容)。

我觉得这应该是一个相当简单的问题,但到目前为止我还没能弄明白。

严格地说,这是我的问题的一个简化;我实际上想要1+这个值,而且我永远不会在叶子上调用该函数。但核心问题是这个。

0 个答案:

没有答案