code: private int searchFreeBase(SortedSet<Integer> children)
      {
          int minChild = children.first();
          int maxChild = children.last();
          int current = 0;
          while (getCheck(current) != 0) // 循环链表回到了头，说明没有符合要求的“连续”区间
          {
              if (current > minChild + 1)
              {
                  int base = current - minChild;
                  boolean ok = true;
                  for (Iterator<Integer> it = children.iterator(); it.hasNext(); ) // 检查是否每个子节点的位置都空闲（“连续”区间）
                  {
                      int to = base + it.next();
                      if (to >= getBaseArraySize())
                      {
                          ok = false;
                          break;
                      }
                      if (!isEmpty(to))
                      {
                          ok = false;
                          break;
                      }
                  }
                  if (ok)
                  {
                      return base;
                  }
              }
              current = -getCheck(current); // 从链表中取出下一个空闲位置
          }
          int oldSize = getBaseArraySize(); // 没有足够长的“连续”空闲区间，所以在双数组尾部额外分配一块
          expandArray(oldSize + maxChild);
          return oldSize;
      }
docs: 寻找可以放下子节点集合的“连续”空闲区间
  
  @param children 子节点集合
  @return base值