错了,错了,Value可以是个一维数组。

解决方案 »

  1.   

    考虑递归比较简单,想了一下大致上是这样:public static HashMap getClientIDPosition(String as_ClientID, int layernumber) {
        // 获取左右子节点
        String leftID = getLeftID(as_ClientID);
        String rightID = getRightID(as_ClientID);
        HashMap result = new HashMap();
        if (leftID != null) {
            // 左子节点的map直接加入结果
            result.putAll(getClientIDPosition(leftID, layernumber + 1));
        }
        if (rightID != null) {
            // 右子节点的map需要调整value[1],加上每一层的位移量
            HashMap rightMap = getClientIDPosition(rightID, layernumber + 1);
            for (Iterator iterator = rightMap.keySet(); iterator.hasNext();) {
                String id = (String)iterator.next();
                int[] value = (int[])rightMap.get(id);
                value[1] += (1 << (value[0] - layernumber - 1));
            }
            result.putAll(rightMap);
        }
        // 加入root节点
        int[] root = {layernumber, 1};
        result.put(as_ClientID, root);
        return result;
    }