让我们考虑一下,以下是二叉树的Level Order Traversal的结果。
Ex:1,2,3,4,5,6,7,8
但是,我得到了一个问题,就像给定的数据列表一样,如何计算二叉树中的级别总数。
我认为某些事情,比如 Sqrt(8)并对其进行 Math.Round ,会产生结果。
但我怀疑,我错了。
我可以知道,做到这一点的理想是什么。
提前致谢...
答案 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)
级别索引值任一都可以从0
或1
开始。
如果您要计算的级别索引是从 0 (即 0级的根)开始的,则
#no.of levels = floor(log_2(n))
如果您要计算从1 (即 1级的根)开始的级别索引,则
#no.of levels = 1 + floor(log_2(n))