Не могли бы вы лучше объяснить, что вы пытаетесь сделать?
Я нахожу этот раздел кода особенно запутанным.
if (tree.key != '$') {
System.out.print(tree.key + "(" + buf + ") " );
} else {
System.out.print(tree.key + "(" + buf + ") " );
}
Вы собираетесь печатать одно и то же, независимо от того, по какому пути идет IF / ELSE, так зачем нужна условная часть?
Также, когда вы делаете следующее:
StringBuffer newSB = new StringBuffer();
newSB.append(buf);
Вы действительно создаете новый StringBuffer объект, локально ограниченный этой функцией. Однако вы добавляете содержимое параметра buf к новому StringBuffer . Это может создать иллюзию того, что вы добавляете один и тот же StringBuffer на каждой итерации функции, но вы действительно создаете новую каждый раз.
Если бы вы могли прояснить проблему немного больше, я думаю, мы могли бы помочь.