В настоящее время работает над программой для стимулирования дерева, сделанного из arrayList строк, состоящих из случайных 0 и 1.
Каждый узел имеет ограничение на количество значений, которые он может хранить, а корень всегда заполняется первыми значениями node.size. И любые значения после должны идти к левому или правому дочернему элементу (в зависимости от того, является ли это значением 0 или 1) 0 = слева 1 = справа. По мере роста дерева каждый уровень оценивается по индексу высоты дерева.
УЗЕЛ КЛАСС
public class Node {
public ArrayList<String> elements;
public Node leftC;
public Node rightC;
private String data;
int size = 5; //size limit of the Arraylist in each node
public Node(s){
elements = new ArrayList<String>();
elements.add(s);
}
public void addString(String s){
elements.add(s);
}
}
ДЕРЕВО КЛАСС
public void insert(String s){
root = insert(root,s);
}
private Node insert(Node n, String s){
if (n == null){
n = new Node(s);
} else if (!n.isFull()){
n.addString(s);
} else {
if (s.charAt(0) == '0'){
n.leftC = insert(n.leftC,s);
} else if (s.charAt(0) == '1'){
n.rightC = insert(n.rightC,s);
}
}
return (n);
}
Edit:
Спасибо за вклад, я воспользовался советом и реализовал рекурсивную функцию для этого.
Дерево теперь вроде работает ... Оно правильно добавляет первые значения Node.size в массив и отправляет остальное его дочерним элементам на основе 0 или 1.
Example:
Root node:
[1011001001, 1011101101, 1111011011, 1011011101, 0101111011]
Left Child Node [0111001000, 0111111111, 0010101010, 0100000000, 0011010000]
Right Child Node [1111011111, 1011010110, 1001101000, 1000001110, 1110000000]
Однако именно здесь я сталкиваюсь с новой проблемой, в которой я полностью застрял.
Если я пойду оценивать дочерние узлы L и R этого нового узла ... кажется, что, поскольку он продолжает оценивать значение для индекса charAt 0, он создает только дерево в форме треугольника
right child @ right [1100000011, 1100000000, 1011100000, 1011011011, 1010101010]
left child @ right - none
right child @ left - none
left child @ left [0010010101, 0010101011, 0110000100, 0011000000, 0010110111]
У меня вопрос: как мне сделать так, чтобы индекс charAt, который будет оцениваться, соотносился с высотой дерева?
Например .. если бы мое дерево было сделано правильно, следующий слой узлов после первого был бы (оцените индекс charAt 1 вместо 0)
right child @ right [1100000011, 1100000000]
left child @ right [1011100000]
right child @ left [0110000100, 0111001000]
left child @ left [0010010101, 0010101011, 0011000000,0010110111,0001110000]
Итак, когда мы продолжим и дерево заполнится в каждом узле, мы оценим его по 3-му индексу и т. Д.
Я не уверен, как это реализовать.