有人可以在Java TreeMap中解释computeRedLevel(int sz)吗?

时间:2016-03-09 11:51:12

标签: java data-structures treemap red-black-tree

private static int computeRedLevel(int sz) {
    int level = 0;
    for (int m = sz - 1; m >= 0; m = m / 2 - 1)
        level++;
    return level;
}

我无法弄清楚这个算法如何计算红色等级?有人可以解释一下吗?

2 个答案:

答案 0 :(得分:0)

根据实现,方法computeRedLevel(int size)buildTree()方法调用,该方法将所有节点分配为BLACK。这是最后一个完整的' buildTree()方法生成的完整二叉树的级别。

现在,由于TreeMap使用Red Black Tree而RBT是self balancing binary search tree,要从顶部转到最后一级,它会在每次迭代时将大小减小2作为高度自平衡BST是O(logn)

因此,这将返回最后一级。

for (int m = sz - 1; m >= 0; m = m / 2 - 1)
        level++;
    return level;

答案 1 :(得分:0)

computeRedLevel

的说明
  

找到分配所有节点BLACK的级别。这是最后一个'完整' buildTree生成的完整二叉树的级别。

首先,追溯sz,发现sz是复制地图的大小。 其次,TreeMap由红黑树(RBT)支持,Black Heights是相同的。

将复制地图中的所有元素作为完整二叉树中的节点,并将complete binary tree黑色的完美部分中的所有节点着色,将很容易满足RBT的特征。

computeRedLevel(int sz)用于计算完整二叉树的完美二叉树部分的级别。 例如,下图中完整二叉树的完美部分的级别为3.因此compteRedLevel(11)为3。 an complete tree