У меня есть массив типа int, который описывает объекты Node определёнными последовательностями чисел, у каждого Node может быть больше двух потомков, я не нашёл нормальной информации о том, как строить такое дерево, я сделал так : из массива получаю информацию о названии, весе, и кол-ве потомков корня Node. По кол-ву потомков я создал массив типа Node длиной в число потомков. Что именно я должен поместить в этот массив - объекты, или ссылки на них по типу Node n1, n2 ...;
Проблема в том, что массив может быть любой длины, и я не совсем понимаю как мне организовать тот код что я написал, для того чтобы доставать информацию не только о корне, но и об объектах ссылки на которые будут находиться в массивах типа Node.
Пример конструктора для объекта типа Node который имеет потомков
public Node(String name, int weight, Node[] children) {
this.name = name;
this.weight = weight;
this.children = children;
}
Если у Node нет потомков, то я сделал такой же конструктор только без массива Children.
Вот код который у меня есть к этому времени (массив заполнил произвольными данными, чтобы было с чем работать и видеть работает ли то, что я пишу, а так не считая очередности информации он может быть произвольным)
**P.S. для поиска каждого параметра для корня я написал по 2 варианта кода, потому что название может быть записано в list[startPoint], или в list[startPoint] + list[startPoint + 1], то-есть 2 символа char**
public class Main {
public static void main(String[] args) {
String korName;
int korWeight;
int temp = 0;
Scanner scanner = new Scanner(System.in);
System.out.println("Enter array's size");
int size = scanner.nextInt();
System.out.println("Enter starting point");
int startPoint = scanner.nextInt();
int[] list = new int[size];
list[0] = 0;
list[1] = 65;
list[2] = 0;
list[3] = 1;
list[4] = 7;
list[5] = 19;
list[6] = 0;
list[7] = 66;
list[8] = 0;
list[9] = 2;
list[10] = 14;
list[11] = 0;
list[12] = 31253;
list[13] = 31254;
list[14] = 68;
list[15] = 0;
list[16] = 4;
list[17] = 17;
list[18] = 0;
list[19] = 67;
list[20] = 0;
list[21] = 3;
list[22] = 0;
//--------------------------------------find kor name-----------------------------------------
if (list[startPoint + 1] != 0) {
String a = String.valueOf(Character.toChars(list[startPoint]));
String b = String.valueOf(Character.toChars(list[startPoint + 1]));
korName = a + b;
} else {
korName = String.valueOf(Character.toChars(list[startPoint]));
}
//--------------------------------------find kor weight---------------------------------------
if (list[startPoint + 1] != 0) {
korWeight = list[4];
} else {
korWeight = list[3];
}
//--------------------------------------find kor children amount------------------------------
if (list[startPoint+3] != 0 && list[startPoint+1] == 0){
for (int i = 3; i < list.length; i++){
if (list[startPoint+i] == 0){
break;
}
if (list[startPoint+i] != 0){
temp++;
}
}
Node[]korChildren = new Node[temp];
}
if (list[startPoint+1] != 0 && list[startPoint+4] != 0){
for (int i = 4; i < list.length; i++){
if (list[startPoint+i] == 0){
break;
}
if (list[startPoint+i] != 0){
temp++;
}
}
Node[]korChildren = new Node[temp];
}
System.out.println(temp);
}
На этом этапе я застрял на том что создал массив правильного размера по кол-ву потомков, и не знаю как заполнять дерево дальше.
Ruby Rain
1 уровень
Создание и заполнение N-Ary tree
Обсуждается
Комментарии (2)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Lev MoiseevSoftware Developer в FirstBit
24 января 2021, 08:10
1. у каждого Node может быть больше двух потомков
2. Класс Node для хранения графа может быть таким:
0
Ruby Rain
5 января 2021, 21:13
Пожалуйста помогите с этим заданием, это важно
0