我即将实现一个好的二叉搜索树。有谁知道如何计算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;
}
答案 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;
}