private void moveSubtree(final TreeNode wMinus, final TreeNode wPlus, final TreeNode parent, final double shift) {
        final int subtrees = getNumber(wPlus, parent) - getNumber(wMinus, parent);
        setChange(wPlus, getChange(wPlus) - shift / subtrees);
        setShift(wPlus, getShift(wPlus) + shift);
        setChange(wMinus, getChange(wMinus) + shift / subtrees);
        setPrelim(wPlus, getPrelim(wPlus) + shift);
        setMod(wPlus, getMod(wPlus) + shift);
    }
@param vIMinus
@param v
@param parentOfV
@param defaultAncestor
@return the greatest distinct ancestor of vIMinus and its right neighbor v
stroom-core-client-widget/src/main/java/stroom/widget/htree/client/treelayout/AbegoTreeLayout.java