     return
 
   getEnd: (id) ->
+    return unless @ids.has(id)
     childStart = Point.zero()
     for child in @children
       if endRelativeToChild = child.getEnd(id)

    if @children.length > BRANCHING_FACTOR
      splitIndex = Math.ceil(@children.length / BRANCHING_FACTOR)
      [new Node(@children.slice(0, splitIndex)), new Node(@children.slice(splitIndex))]

  getStart: (id) ->
    childStart = Point.zero()
    for child in @children
      if startRelativeToChild = child.getStart(id)

    indent = ""
    indent += " " for i in [0...indentLevel] by 1

    ids = []
    values = @ids.values()
    until (next = values.next()).done
      ids.push(next.value)

    """
      #{indent}Node #{@extent} (#{ids.join(" ")})
      #{@children.map((c) -> c.toString(indentLevel + 2)).join("\n")}
    """

