В этом двоичном дереве предположим, что узел D сожжен [<- 0 секунд], через 1 секунду узлы B, E и C начнут гореть [<- 1 секунда], а еще через 1 секунду узлы F и A будут сжечь [<- 2 сек]. После этого G сгорит [<- 3 с], затем в следующую секунду я сгорю [<- 4 с] и после этого H сгорит. [<- 5 секунд] </p>
- [ввод]
- Использовать очередь записи узлов.
- Каждую секунду, записывайте все узлы, подключенные к любому узлу в очереди, вам придется использовать другой список, чтобы сохранить это. т.е.
isBurned[someIndex]
или isBurned.leftNode.rightNode = true
.
- Вывод всех не сгоревших узлов или других данных.
Это, вероятно, слишком много. Это неполная модель того, как ваш ответ может работать.
import java.util.LinkedList;
import java.util.Scanner;
public class Test2 {
private static Character[] toArray (LinkedList<Character> L, char Char) {
Character[] ReturnedList = new Character[L.size() + 1];
for(int i=0; i<L.size(); i++) {
ReturnedList[i] = L.get(i);
}
ReturnedList[L.size()-1] = Char; // It needs to be longer because it's used for the left and right
//nodes, and they need an extra L or R to show they are on the left or right side
return ReturnedList;
}
private static class Node { // for binary tree
LinkedList <Character> spot = new LinkedList <Character>();
Node left = new Node(toArray(spot, 'L'));
Node right = new Node(toArray(spot, 'R')); // left side and right side extention of tree, may stay as null
boolean isBurned = false;
char name = ' '; // unused.
///9183947/java-programma-dlya-poiska-vseh-nesgorevshih-uzlov-pri-zapuske-uzla-v-dvoichnom-dereve
public Node(Character [] args) { // either L [left] or R [right]
for(int i=0; i<args.length; i++) {
spot.add(args[i]);
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner (System.in);
Node tree = new Node(new Character[0]);
tree.name = 'F';
tree.left.name = 'B';
tree.right.name = 'G';
tree.left.left.name = 'A'; //tree is a node
tree.left.right.left.name = 'C';
tree.right.right.name = 'I';
tree.right.right.left.name = 'H';
tree.left.right.name = 'D';
tree.left.right.right.name = 'E';
//[set a node on fire with whatever you'd like]
tree.left.right.left.isBurned = true;
LinkedList <Character[]> Queue = new LinkedList<Character[]>();
Character [] placeholder = {'L', 'R', 'L'};
Queue.add(placeholder);
int seconds = sc.nextInt();
while(!Queue.isEmpty()) {
///////////Variables/////////
Character[] X = Queue.pop(); // List of directions
Node Y = new Node(X);
Y = tree; // start here and go down
///////////Location//////////
for(int i=0; i<X.length; i++) {
if(X[i] == 'L') {
Y = Y.left; // keep on going right or left.
}
else {
Y = Y.right;
}
///////////Burning///////////////
//Think about it. How would you find a node that is connected to the burning node?
//Don't forget to add newly burning nodes, and don't add nodes that have already burned.
//The character array, X, is a way you could manage this with.
}
}
/*
F
/ \
/ \
B G
/ \ \
A D I
/ \ /
C E H
*/
}
}
Я знаю, что, вероятно, есть лучшие альтернативы частям моего вопроса. (Как и массив заполнителей). Пожалуйста, скажите мне альтернативы им.