private int tryRemove(int node)
    {
        checkArgument(node != -1, "node is -1");

        int left = lefts[node];
        int right = rights[node];

        if (left == -1 && right == -1) {
            // leaf, just remove it
            remove(node);
            return -1;
        }

        if (left != -1 && right != -1) {
            // node has both children so we can't physically remove it
            counts[node] = 0;
            return node;
        }

        // node has a single child, so remove it and return the child
        remove(node);
        if (left != -1) {
            return left;
        }
        else {
            return right;
        }
    }
private int tryRemove(int node)
    {
        checkArgument(node != -1, "node is -1");

        int left = lefts[node];
        int right = rights[node];

        if (left == -1 && right == -1) {
            
            remove(node);
            return -1;
        }

        if (left != -1 && right != -1) {
            
            counts[node] = 0;
            return node;
        }

        
        remove(node);
        if (left != -1) {
            return left;
        }
        else {
            return right;
        }
    }
private int tryRemove ( int node ) { checkArgument ( node != - 1 , "node is -1" ) ; int left = lefts [ node ] ; int right = rights [ node ] ; if ( left == - 1 && right == - 1 ) { // leaf, just remove it remove ( node ) ; return - 1 ; } if ( left != - 1 && right != - 1 ) { // node has both children so we can't physically remove it counts [ node ] = 0 ; return node ; } // node has a single child, so remove it and return the child remove ( node ) ; if ( left != - 1 ) { return left ; } else { return right ; } }
Remove the node if possible or set its count to 0 if it has children and
it needs to be kept around
Remove the node if possible or set its count to 0 if it has children and it needs to be kept around