Exemple #1
0
unsigned int bst_length(bst_t bst) {
    unsigned int length;
    length = 0;

    if (bst != NULL) {
        /* For the current node we increase length by one and then we plus the
         * length of its childrens */
        ++length;
        length += bst_length(bst->left);
        length += bst_length(bst->right);
    }
    return (length);
}
unsigned int bst_length(bst_t bst) {

    switch (bst_type(bst)) {

    case isNotEmpty:

        return (1 + bst_length(bst->izq) + bst_length(bst->der));
        break;


    default:

        return 0;
        break;

    }

}
bst_t bst_add(bst_t bst, index_t index, data_t data) {

/*	assert(bst_search(index, bst)==NULL);*/ /*PRE*/
    unsigned int length = bst_length(bst);

    switch (bst_type(bst)) {

    case isNull:

        bst = bst_empty();
        bst->pair = pair_from_index_data(index, data);
        break;

    case isEmpty:

        bst->pair = pair_from_index_data(index, data);
        break;

    case isNotEmpty:

        switch (index_compare(index, bst)){
        
        case EQ:
            break;
            
        case LT:
            bst->izq = bst_add(bst->izq, index, data);
            break;
            
        case GT:
            bst->der = bst_add(bst->der, index, data);
            break;
    
        }
        
        break;
    }

    assert(bst_length(bst) == length + 1);
     /*POST*/ return (bst);

}
Exemple #4
0
bst_t bst_add(bst_t bst, index_t index, data_t data) {
    unsigned int prev_length = bst_length(bst);
    if (bst != NULL) {
        if (index_is_less_than(index, pair_fst(bst->pair))) {
            bst->left = bst_add(bst->left, index, data);
        } else if (!index_is_equal(index, pair_fst(bst->pair))) {
            bst->right = bst_add(bst->right, index, data);
        }
    } else {
        bst_t add = calloc(1, sizeof(struct _tree_node_t));
        add->pair = pair_from_index_data(index, data);
        add->left = NULL;
        add->right = NULL;
        bst = add;
    }

    assert(prev_length + 1 == bst_length(bst));
    return bst;


}