Как отобразить дерево префиксов в консоли?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как отобразить дерево префиксов в консоли?

Сообщение Anonymous »

У меня есть такой класс:

Код: Выделить всё

public class TreeNode {
public String nodeName;

public List clildren = new ArrayList();

TreeNode(String[] splittedTemplate) {
splittedTemplate[0] = splittedTemplate[0].replaceFirst("\\(", "");
splittedTemplate[splittedTemplate.length-1] = splittedTemplate[splittedTemplate.length-1].replaceFirst("\\)", "");
nodeName = splittedTemplate[0];
splittedTemplate[splittedTemplate.length-1] = splittedTemplate[splittedTemplate.length-1];

boolean subArrayStarted = false;
int subArrayStartPosition = -1;
int openBracketsCount = 0;
int closeBracketCount = 0;

String subArray = "";

for(int i = 1; i < splittedTemplate.length; i++) {
if(splittedTemplate[i].contains("(")) {
subArrayStarted = true;
if(subArrayStartPosition == -1) {
subArrayStartPosition = i;
}
openBracketsCount += Utils.getCountNumbersInStr('(', splittedTemplate[i]);
}

if(subArrayStarted) {
if(subArrayStartPosition == i) {
subArray += splittedTemplate[i];
} else {
subArray += "," + splittedTemplate[i];
}
} else {
clildren.add(new TreeNode(new String[]{splittedTemplate[i]}));
}

if(splittedTemplate[i].contains(")")) {
closeBracketCount += Utils.getCountNumbersInStr(')', splittedTemplate[i]);
if(openBracketsCount == closeBracketCount) {
clildren.add(new TreeNode(subArray.split(",")));
subArrayStarted = false;
subArrayStartPosition = -1;
subArray = "";
closeBracketCount = 0;
openBracketsCount = 0;
}
}
}
}

public void toStringNode(int tabs) {

String resultString = "";
int stringLength = 0;

for(TreeNode val: clildren) {
stringLength += val.getStringLength();
}

stringLength -= nodeName.length();

resultString += Utils.copySpace(stringLength/2) + nodeName + Utils.copySpace(stringLength/2);

if(tabs == 1) {
System.out.println(resultString);
}
}

public int getStringLength() {
if(this.clildren.size() == 0) {
return this.nodeName.length()+2;
}

int stringLength = 0;

for(TreeNode val: clildren) {
stringLength += val.getStringLength();
}

return stringLength;
}
}
В моей программе я разделяю строку «(a,b,(c),d)» и получаю массив
String[] SplitTemplate. Конструктор класса превращает этот массив в дерево префиксов. Я застрял на этапе вывода этого дерева префиксов на консоль в виде дерева.
Метод toStringNode должен вывести дерево на консоль.
Мне нужно отобразить дерево в таком формате:
Изображение

Я поэкспериментировал с кодом и получилось отобразить дерево в таком виде:
[img]https://i.sstatic. net/JVJvXk2C.png[/img]

Для другого дерева (a, b, (c, d, (e, f), g, (1, 2, (3, 4) )), 5):
Изображение

Но это не то, что мне нужно

Подробнее здесь: https://stackoverflow.com/questions/784 ... he-console
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»