【问题标题】:Minimum number of levels in BST given the number of nodes给定节点数的 BST 中的最小级别数
【发布时间】:2018-01-21 16:39:32
【问题描述】:

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

这是我现在正在尝试的,将日志更改为 base 2:

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

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

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

【问题讨论】:

  • 尝试四舍五入到最接近的整数。当您进行 int 强制转换时,结果会向下舍入。
  • @yaman 好的,谢谢。现在似乎工作正常。

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


【解决方案1】:

好的,所以我想在 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 进行测试。似乎对于所有测试的节点计数都可以正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多