Вы можете перебирать список узлов (используя любые критерии, которые вы решите - все узлы, только видимые), и вы сможете вычислить ширину для любого конкретного узла, выполнив что-то вроде этого:
int theWidth = theTextWidth + theIndentSize * theIndentLevel + theImageWidth;
Вы можете рекурсивно пройтись по дереву (опять же, пропуская невидимые узлы, если это ваша реализация) и вернуть theWidth из вызова, сравнивая его с ранее вычисленной maxWidth, и эта maxWidth должна быть довольно близка к ширине дерева. (плюс отступы, поля и т. д.). Затем установите расстояние сплиттера до этого значения.