#include "./mylibrary.h" /***Función que chequea arbol (opcional)***/ void chequea (TREE_NODE *z) { if (z != NULL) { chequea (z->left); printf ("nota %d \t # elem. sub-árbol %d \n", z->element, z->size); chequea (z->right); } } /***Función que hace la inserción de un nodo***/ void Tree_Insert( TREE_NODE ** pT, TREE_NODE *z) { TREE_NODE *x, *y; y=NULL; x = *pT; while (x != NULL) /* buscamos su padre */ { y = x; x->size++; if ( z->element < x->element) x = x->left; else x= x->right; } z->size=1; z->p = y; if (y == NULL) /* se trata del primer nodo */ *pT = z; else if (z->element < y->element) y->left = z; else y->right = z; } /***Función que obtiene la posición de una nota***/ int search_rank( TREE_NODE *T, int k){ int r; TREE_NODE *y, *x; x=T; while (x != NULL) if (x->element == k) { y = x; x = x->right; } else if (k < x->element) x = x->left; else x = x->right; x=y; if(x->left == NULL) r = 1; else r = x->left->size + 1; y=x; while (y != T) { if ( y == y->p->right) r = (y->p->size) - (y->size) + r; y = y->p; } return(r); }