private static int computeRedLevel(int sz) {
int level = 0;
for (int m = sz - 1; m >= 0; m = m / 2 - 1)
level++;
return level;
}
我无法弄清楚这个算法如何计算红色等级?有人可以解释一下吗?
答案 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