public void printSelf() {

        System.out.printf( "Node value = %d\n" , getData() );

        for ( int i = 0 ; i < adjacentNodes.size() ; i ++ ) {

            try {

                System.out.printf( "Adjacent Node[%d] = %d\n" , i , adjacentNodes.getData( i ) );

            } catch ( OutOfBoundsException error ) {

                System.out.println( error.getMessage() );

            }

        }

        if ( left != null && right != null ) {

            System.out.printf( "Node = %d\tright=%d\tleft=%d\n" , getData() , right.getData() , left.getData() );

        }
        else if ( left == null && right != null ) {

            System.out.printf( "Node = %d\tright=%d\t\tleft=EMPTY\n" , getData() , right.getData() );

        }
        else if ( left != null && right == null ) {

            System.out.printf( "Node = %d\tright=EMPTY\tleft=%d\n" , getData() , left.getData() );

        }
        else {

            System.out.printf( "Node = %d\tright=EMPTY\tleft=EMPTY\n" , getData() );

        }

        if ( parent != null ) {

            System.out.printf( "Parent Node = %d\n" , parent.getData() );

        }
        else {

            System.out.printf( "Parent Node = EMPTY\n" );

        }

    }