private TreeNode ancestor(final TreeNode vIMinus, final TreeNode v, final TreeNode parentOfV,
                              final TreeNode defaultAncestor) {
        final TreeNode ancestor = getAncestor(vIMinus);

        // when the ancestor of vIMinus is a sibling of v (i.e. has the same
        // parent as v) it is also the greatest distinct ancestor vIMinus and
        // v. Otherwise it is the defaultAncestor
        return tree.isChildOfParent(ancestor, parentOfV)
                ? ancestor
                : defaultAncestor;
    }
@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