вопрос для всех.
Мне нужно пройти через двоичное дерево и заполнить массив каждым узлом в правильном порядке, чтобы при печати каждого элемента массива он печатался как дерево. У меня есть правильный метод печати, и метод, чтобы взять массив и создать двоичное дерево из него, правильный. Тем не менее, мой текущий метод для заполнения массива из двоичного дерева не заполняет массив в правильном порядке.
Не существует указанного метода обхода, но я использую предварительный порядок, он должен быть рекурсивным и возвращать массив, а поскольку мое двоичное дерево является универсальным, я использую ArrayList, а не массив.
Я попытался заполнить ArrayList нулем, чтобы я мог разместить элементы по указанному индексу, но у меня возникают ошибки за пределами допустимого.
Вот мой текущий код:
public static <T> ArrayList<T> loadOverToArray(BinaryNode<T> root, int index){
int length = findDepth(root);
long size = powerOfTwo(length);
ArrayList<T> temp = new ArrayList<>();
/*for(int i = 0; i < size; i++){
temp.add(null);
}*/
if(root != null){
temp.add(root.getData());
}
if(root.getLeft() != null){
temp.addAll(loadOverToArray(root.getLeft(), leftChildIndex(index)));
}
if(root.getRight() != null){
temp.addAll(loadOverToArray(root.getRight(), rightChildIndex(index)));
}
return temp;
}
Дерево, используемое для тестирования:
8
4
2
1
3
6
5
7
12
10
9
11
14
13
15
И дерево, которое мне возвращает мой метод:
8
4
1
7
12
3
10
9
2
6
11
14
5
13
15
Большое спасибо!