给定数据列表的二叉树中的级别数

时间:2016-04-21 03:30:57

标签: data-structures binary-tree

让我们考虑一下,以下是二叉树的Level Order Traversal的结果。

Ex:1,2,3,4,5,6,7,8

但是,我得到了一个问题,就像给定的数据列表一样,如何计算二叉树中的级别总数。

我认为某些事情,比如 Sqrt(8)并对其进行 Math.Round ,会产生结果。

但我怀疑,我错了。

我可以知道,做到这一点的理想是什么。

提前致谢...

4 个答案:

答案 0 :(得分:1)

如果使用广度优先顺序的索引标记节点,则可以在O(1)时间内计算没有任何遍历的级别。因此,如果您正在进行多个查询,则可以执行O(N)BFT并在O(1)时间内回答每个查询。

关卡的公式为:

level = floor(log(index + 1))

日志是基地2

此链接可以帮助您How can I calculate the level of a node in a perfect binary tree from its depth-first order index?

答案 1 :(得分:1)

在一般情况下,具有n个节点的二叉树将至少具有1 + floor(log_2(n))个级别。例如,您可以在3个级别上容纳7个节点,但无论如何,8个节点将至少占用4个级别。

同样在一般情况下,在简并二叉树(看起来像是从根垂下的链表)的情况下,上限是n级别。考虑一下您的示例,其中级别顺序遍历(也称为广度优先遍历)为1 2 3 4 5 6 7 8。可能存在以下情况以及介于两者之间的所有情况:

       1             1
      / \             \
     /   \             2
    2     3             \
   / \   / \             3
  4   5 6   7             \
 /                         4
8                           \
                             5
  (4 levels)                  \
                               6
                                \
                                 7
                                  \
                                   8
                      (8 levels)

particular types of binary trees可以为上限设置更强的约束。对于完整完整二叉树,级别数始终为1 + floor(log_2(n)),因为树的形状仅取决于n

答案 2 :(得分:0)

完整二叉树的高度最高为O(logN)。 其中N是您在树中填充的节点数。

请注意,由于实际高度可能因某些加法或缩放因子而异,因此需要使用Big O表示法。

https://www.cs.cmu.edu/~adamchik/15-121/lectures/Trees/trees.html

答案 3 :(得分:0)

级别索引值任一都可以从01开始。

如果您要计算的级别索引是从 0 (即 0级的根)开始的,则

#no.of levels = floor(log_2(n))

如果您要计算从1 (即 1级的根)开始的级别索引,则

#no.of levels = 1 + floor(log_2(n))