У меня бинарное деревафункция похожа для обхода бинарного дерева
public class Node
{
int value;
Node left;
Node right;
public Node getLeft() {
return left;
}
public Node getRight() {
return right;
}
public String getValue() {
return value;
}
}
И в основном я получил функцию, чтобы пересечь его. Для дерева
5
/\
3 7
/\
1 2
Сначала один создает очередь узлов с первым шириной обходом (5,3,7,1,2). Второй возвращает значение узла, например. 7 для числа 2 или 2 для номера 4.
private void queueOfTreaversed() {
LinkedList<Node> queue = new LinkedList<Node>();
if (root != null)
queue.add(root);
while (!queue.isEmpty()) {
Node temp = queue.removeFirst();
if (temp.getLeft() != null && temp.getRight() != null) {
traversed.add(temp); //there is a difference
queue.add(temp.getLeft());
queue.add(temp.getRight());
}
}
}
public int getValue(int n) {
LinkedList<Node> queue = new LinkedList<Node>();
if (root != null)
queue.add(root);
while (!queue.isEmpty() && n>0) {
Node temp = queue.removeFirst();
if (temp.getLeft() != null && temp.getRight() != null) {
queue.add(temp.getLeft());
queue.add(temp.getRight());
}
}
return queue.peekFirst().getValue(); //there is a difference
}
И я получил дублирования кода, я не знаю, как избавиться от. Я использую пройденный тем временем и поп-элементы из этой очереди, поэтому элементов не будет в этом порядке, и пройденный не может быть использован. Может ли кто-нибудь дать какой-либо намек?
Где переменная «пройдена» в первом методе инициализирована? –