给定节点数的BST中的最小级别数

时间:2018-01-21 07:28:46

标签: algorithm binary-tree binary-search-tree

我试图找到我的BST可能拥有的最小级别数。我已经有一个函数Count(),它将为我提供树中存在的节点总数。假设这个例子,n = Count()的结果。所以n是树中的节点数。

这是我现在正在尝试的内容,将日志更改为基础2:

(int)Math.Log(n + 1, 2)

这似乎仅在等级满时才有效。例如,对于具有15个节点的FULL树,它正确显示4个级别。另外,假设一个单节点的BST有1个级别(我听说有时人们认为这个0级?)。但是如果输入13个节点,BST仍然需要4个级别,但是级别不满,我的结果是不准确的。

我的公式错了吗?或者我的问题是什么?

1 个答案:

答案 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进行测试。似乎对所有测试的节点计数都能正常工作。