我试图找到我的BST可能拥有的最小级别数。我已经有一个函数Count(),它将为我提供树中存在的节点总数。假设这个例子,n = Count()的结果。所以n是树中的节点数。
这是我现在正在尝试的内容,将日志更改为基础2:
(int)Math.Log(n + 1, 2)
这似乎仅在等级满时才有效。例如,对于具有15个节点的FULL树,它正确显示4个级别。另外,假设一个单节点的BST有1个级别(我听说有时人们认为这个0级?)。但是如果输入13个节点,BST仍然需要4个级别,但是级别不满,我的结果是不准确的。
我的公式错了吗?或者我的问题是什么?
答案 0 :(得分:0)
好的,所以我想在yaman的帮助下我找到了答案:
Math.Ceiling(Math.Log(n + 1, 2))
我测试了1-20的每个节点。似乎运作正常。
编辑:
using System;
namespace Testing
{
class TestLevelCalculation
{
static void Main(string[] args)
{
for (int n = 0; n < 34; n++)
{
Console.Write("Number of Nodes: " + n + " Number of Levels: ");
Console.WriteLine(Math.Ceiling(Math.Log(n + 1, 2)));
}
}
}
}
将此快速测试代码运行到仅使用节点0 - 34进行测试。似乎对所有测试的节点计数都能正常工作。