二进制搜索树<tkey,tvalue =“”> height </tkey,>

时间:2014-03-29 00:58:33

标签: c# binary-search-tree

我即将实现一个好的二叉搜索树。有谁知道如何计算Binarysearchtree TKey,TValue高度?谢谢! 现在我用它来获取任何BST树的高度。但在这种具体情况下它似乎没有用。

     public int Height()
    {
        return height(root);
    }
    protected int height(Node tree)
    {

        if (tree == null)
            return -1;
        int lefth = height(tree.left);
        int righth = height(tree.right);

        if (lefth > righth)
            return lefth + 1;
        else
            return righth + 1;


    }

2 个答案:

答案 0 :(得分:0)

你知道你已经有一个吗?

System.Collections.Generic.SortedSet<T>red-black tree(身高均衡)。

如果这还不够,您还可以获得C5 Collections Library,它可以为您提供其他红黑树实现:

  • TreeSet<T>

      

    表示使用平衡的红黑树的一组项目;见第13.10节。   按索引或按项目值访问项目需要时间 O(log n)和项目插入   和项目删除需要时间 O(log n)摊销。树集不允许   重复,因此属性AllowsDuplicates为false。

  • TreeBag<T>

      

    表示使用平衡的红黑树的物品袋或多重物品。   按索引或按项目值访问项目需要时间 O(log n)和项目插入   和项目删除需要时间 O(log n)摊销。

         

    树袋允许重复,因此属性AllowsDuplicates为真,   并且只存储每个项目等价类的一个代表,所以   DuplicatesByCounting是真的。

  • TreeDictionary<K,V>

      

    表示使用有序的(键,值)对或条目的字典   平衡的红黑二叉树。条目访问,条目删除和条目插入   花时间 O(log n)。枚举树的键,值或条目   字典遵循按键顺序,由密钥比较器确定。

去城里,但为什么要重新发明轮子,除非你真的想要?

答案 1 :(得分:0)

private static int getHeight(BTreeNode n){

if(n == null)
    return 0;

int lHeight = getHeight(n.left);
int rheight = getHeight(n.right);

int height = 1+Math.max(lHeight,rheight);

return height;

}