Путаница обхода
В настоящее время мой основной код для двоичного дерева поиска выглядит следующим образом:
public void add(int value) {
overallRoot = add(overallRoot, value);
}
private IntTreeNode add(IntTreeNode root, int value) {
if(root == null){
root = new IntTreeNode(value);
} else if (value <= root.data){
root.left = add(root.left, value);
} else {
root.right = add(root.right, value);
}
return root;
}
public void print() {
printInorder(overallRoot);
System.out.println();
}
private void printInorder(IntTreeNode root) {
if(root != null) {
printInorder(root.left);
System.out.print(root.data + " ");
printInorder(root.right);
}
}
вставив значения 42,9,18,55,7,108,4,70,203,15 в следующем порядке, я могу распечатать дерево, которое выглядит ниже, с помощью метода боковой печати.
203
108
70
55
42
18
15
9
7
4
теперь, когда я вызываю tree.print(), который должен печатать в обходе inorder, он печатает 4,7,9,15,18,42,55,70,108,203, но когда я делаю обход inorder вручную, я получаю 4,7,15,9,18,42,55,70,108,203
Я почти уверен, что выполнение обхода по порядку вручную дало правильные значения, но почему программа распечатала разные значения?
1 ответ
Ваш метод tree.print() правильно выполняет командировку. Результат печати метода стороннего метода неверен. Вы уверены, что вы вставили номера в порядке, который вы дали нам. Если это так, результат должен быть как
-18 -9 -42 -7 -15 -55
-4 -108 -70 -203
И поэтому выход должен быть 4,7,9,15,18,42,55,70,108,203