Когда некоторые наборы данных вставляются в дерево, значения в обходе порядка уровней меняются местами некорректно.Я знаю, что где-то допустил логическую ошибку, но не смог понять, в чем проблема.
Я пытался изменить направление влево / вправо вправо / влево, а также изменить логические операторы, чтобы попытаться выяснить, почему возникает проблема.Отладчик тоже не сильно помог.
public void levelOrder() {
int h = getHeightHelper(root);
int i;
for (i = 1; i <= h; i++)
printLevelHelper(root, i);
System.out.println();
}
private int getHeightHelper(BinaryNode<?> root) {
if (root == null)
return 0;
else {
int leftHeight = getHeightHelper(root.left);
int rightHeight = getHeightHelper(root.right);
if (leftHeight > rightHeight)
return(leftHeight + 1);
else
return (rightHeight + 1);
}
}
private void printLevelHelper(BinaryNode<?> root, int level) {
if (root == null)
return;
if (level == 1)
System.out.print(root.element + " ");
else if (level > 1) {
printLevelHelper(root.left, level - 1);
printLevelHelper(root.right, level - 1);
}
}
private BinaryNode<AnyType> insert( AnyType x, BinaryNode<AnyType> t ) {
if( t == null )
return new BinaryNode<>( x, null, null );
int compareResult = x.compareTo( t.element );
if( compareResult < 0 )
t.left = insert( x, t.left );
else if( compareResult > 0 )
t.right = insert( x, t.right );
else
; // Duplicate, do nothing.
return t;
}
При вводе 8, 2, 10, 1, 6, 14, 4, 7, 13: ожидаемый порядок уровней - 8, 2, 10, 1, 6, 14, 4,7, 13 Однако результат следующий.1 и 6 поменялись местами.8, 2, 10, 6, 1, 14, 4, 7, 13