将某些数据集插入树中时,级别顺序遍历中的值被错误地交换。我知道我在某个地方犯了一些逻辑错误,但是我无法弄清楚问题出在哪里。
我尝试反转左/右/左遍历,并修改了逻辑运算符以试图找出问题发生的原因。调试器也没有太大帮助。
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,6,14,4,7,13 但是,结果如下。 1和6颠倒了。 8、2、10、6、1、14、4、7、13