Я пишу метод для печати двоичного дерева поиска по порядку. Я нашел способ сделать это, но он требует либо удаления, либо обнуления узлов по мере их печати. Ниже мой код:
public String printKeysInOrder() {
String output = "";
if (isEmpty()) return "()";
else{
int i = 0;
while(i!=size()){
Node x = root;
int loopBreak = 0;
while(loopBreak!=1){
if(x.left != null) x = x.left;
else if (x.right != null){
output = output + " " + x.val;
x.key = null;
x = x.right;
i++;
}
else{
output = output + " " + x.val;
x.key = null;
loopBreak = 1;
}
}
i++;
}
}
return output;
}
для дерева:
_7_
/ \
_3_ 8
/ \
1 6
\ /
2 4
\
5
он должен напечатать "1 2 3 4 5 6 7 8"
код работает таким образом, что он предпочитает двигаться влево по дереву до тех пор, пока он больше не сможет двигаться влево, затем он сохраняет значение этого узла в строковом выводе, делает ключ узлов равным нулю (поскольку будущие итерации цикла не спуститесь по этому дереву) и перемещается вправо, если это возможно, или повторяет цикл назад.
Хотя у меня возникли проблемы с тем, чтобы узел был равен нулю, например, когда код выполняется (через тест junit), код не распознает этот нулевой ключ и все равно проходит через это поддерево? Может ли кто-нибудь помочь мне или сказать мне, как сделать так, чтобы указатели x.left и x.right на будущих итерациях распознавали узел как нулевой?