public boolean add(Integer val) {
   if (contains(val)) return false;
   int newLevel = 0;
   while (Math.random() < PROBABILITY) newLevel++;
   while (newLevel > maxLevel) {
     maxLevel++;
     Node newNode = new Node(null);
     newNode.right = new Node(null);
     newNode.down = head;
     head = newNode;
   }
   head = add(head, val, maxLevel, newLevel);
   return true;
 }
 private Node add(Node curr, Integer val, int currentLevel, int wantedLevel) {
   Node start = curr;
   while (curr.right.val != null && curr.right.val < val) curr = curr.right;
   if (currentLevel <= wantedLevel) {
     Node newNode = new Node(val);
     newNode.right = curr.right;
     curr.right = newNode;
   }
   if (currentLevel != 0) {
     curr.down = add(curr.down, val, currentLevel - 1, wantedLevel);
     if (currentLevel <= wantedLevel) curr.right.down = find(curr.down, val);
   }
   return start;
 }
Пример #3
0
  public static String format(Node node) {
    Map<String, Object> map = new HashMap<String, Object>();
    map.put("type", node.type());
    map.put("label", node.label());

    if (node.factory().contains(GraphFactory.Family.directed)) {
      map.put("links:in", node.links(Link.Direction.in));
      map.put("links:out", node.links(Link.Direction.out));
    } else {
      map.put("links", node.links());
    }
    if (node.factory().contains(GraphFactory.Family.fractal)) {
      map.put("up", node.up());
      map.put("down", node.down());
    }
    return format(map);
  }