Путаница обхода

В настоящее время мой основной код для двоичного дерева поиска выглядит следующим образом:

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

Другие вопросы по тегам