Tree* adicionaItemArvore(Tree* arvore, void* dados, FCompara comparador) { Tree * folha; int i=0; for(;;){ i=comparador(dados,arvore->dados); if(i==0) return; if(i<0){ if(arvore->esq==NULL){ folha=criaArvore(dados); arvore->esq=folha; folha->pai=arvore; return; } else arvore=arvore->esq; } if(i>0){ if(arvore->dir==NULL){ folha=criaArvore(dados); arvore->dir=folha; folha->pai=arvore; return; } else arvore=arvore->dir; } } }
void * obtemItemArvore(Tree* arvore, void * dados, FCompara comparador){ int i=0; if (arvore == NULL) return NULL; i=comparador(arvore->dados,dados); if(i==0) return arvore->dados; if(i>0) return obtemItemArvore(arvore->esq,dados,comparador); if(i<0) return obtemItemArvore(arvore->dir,dados,comparador); }
int main(){ int n, digito=99, teste=0; printf("Digite um numero: "); scanf("%i", &n); if(n>10){ digito = n%10; n = n/10; } while(n>10){ n = n/10; } teste = comparador(digito, n); if(teste == 1) printf("1st e ultimo digitos IGUAIS!\n"); else printf("1st e ultimo digitos DIFERENTES!\n"); return 0; }
/** * Funcion de comparacion entre dos estructuras de tipo nodo. * Retorna 1 si ysolo si ambos nodos comparten exactamente el mismo identificador * @param x es el nodo a ser comparado con el nodo y * @param y es el nodo a ser comparado con el nodo x * @param comparador es la funcion de comparacion entre los nodos x y * @return 1, si los nodos son identicos, 0 en caso contrario */ int nodoEquals(nodo x, nodo y,int (*comparador) (void *,void *)) { return comparador(x,y); }