递归级别顺序遍历切换值

时间:2019-02-06 02:06:35

标签: java tree traversal

将某些数据集插入树中时,级别顺序遍历中的值被错误地交换。我知道我在某个地方犯了一些逻辑错误,但是我无法弄清楚问题出在哪里。

我尝试反转左/右/左遍历,并修改了逻辑运算符以试图找出问题发生的原因。调试器也没有太大帮助。

    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

0 个答案:

没有答案