private Node makeSiblings(Node node, Node sibling) { int parentLevel = MAX_BITS - Long.numberOfLeadingZeros(node.bits ^ sibling.bits); Node parent = createNode(node.bits, parentLevel, 0); // the branch is given by the bit at the level one below parent long branch = sibling.bits & parent.getBranchMask(); if (branch == 0) { parent.left = sibling; parent.right = node; } else { parent.left = node; parent.right = sibling; } return parent; }