Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- typedef struct nodo{
- int valor;
- struct nodo* ptrHI;
- struct nodo* ptrHD;
- } TNodo;
- int cont=0;
- void crear_arbol(TNodo ** ptrRaiz);
- void inserta_nodo(TNodo **ptrRaiz, int valor);
- int es_nodo_hoja(TNodo *);
- int buscar_repetidos(TNodo*);
- int buscar(TNodo**,int);
- void crear_arbol(TNodo ** ptrRaiz){
- *ptrRaiz = NULL;
- }
- void inserta_nodo(TNodo **ptrRaiz, int valor){
- TNodo *ptrHoja, *ptrRecorrido, *ptrPadre;
- ptrHoja = (TNodo*)malloc(sizeof(TNodo));
- ptrHoja->valor = valor;
- ptrHoja->ptrHI=ptrHoja->ptrHD=NULL;
- if(*ptrRaiz){
- ptrRecorrido = *ptrRaiz;
- ptrPadre = NULL;
- while (ptrRecorrido){
- ptrPadre = ptrRecorrido;
- if (ptrRecorrido->valor > valor)
- ptrRecorrido = ptrRecorrido->ptrHI;
- else
- ptrRecorrido = ptrRecorrido->ptrHD;
- }
- if (ptrPadre->valor > valor)
- ptrPadre->ptrHI = ptrHoja;
- else
- ptrPadre->ptrHD = ptrHoja;
- }
- else{
- *ptrRaiz = ptrHoja;
- }
- }
- int es_nodo_hoja(TNodo *ptrRaiz){
- if (ptrRaiz->ptrHI ==NULL) return 1;
- if (ptrRaiz->ptrHD ==NULL) return 1;
- return 0;
- }
- int buscar(TNodo ** raiz,int e){
- TNodo *aux=*raiz;int r,s;
- TNodo *aux1=aux->ptrHI;
- if((aux->valor==e) && (cont!=0))return 1;
- else {
- cont++;
- if(es_nodo_hoja(aux)){
- return 0;
- }else{
- r=buscar(&aux1,e);
- aux1=aux->ptrHD;
- s=buscar(&aux1,e);
- if(r) return 1;// si encuentro en el hijo izquierdo, retorna 0
- else if (s) return 1;//si encuentro , en el hijo derecho , retorna 1
- else return 0;//si no retorna 0
- }
- }
- }
- int buscar_repetidos(TNodo* raiz){
- //cambiar raiz por otra
- int j,r,s;
- int e=raiz->valor;
- TNodo* aux=raiz->ptrHI;
- j=buscar(&raiz,e);
- if(j){ //si encuentro valor en la raiz, retorna 1
- return 1;
- }else{
- if(es_nodo_hoja(raiz)){
- return 0;
- }else{//si no es nodo hoja
- cont=0;
- r=buscar_repetidos(aux);
- if (r) return 1; //si encontramos repetidos en el hijo izquierdo
- cont=0;
- aux=raiz->ptrHD;
- s=buscar_repetidos(aux);//si encontramos repetidos en el hijo izquierdo
- if (s) return 0;
- }
- }
- }
- int main(int argc, char** argv) {
- TNodo *ptrRaiz;int repetidos;
- crear_arbol(&ptrRaiz);
- inserta_nodo(&ptrRaiz, 15);
- inserta_nodo(&ptrRaiz, 10);
- inserta_nodo(&ptrRaiz, 17);
- inserta_nodo(&ptrRaiz, 15);
- inserta_nodo(&ptrRaiz, 10);
- inserta_nodo(&ptrRaiz, 5);
- inserta_nodo(&ptrRaiz, 14);
- repetidos=buscar_repetidos(ptrRaiz);
- if (repetidos){
- printf("Hay repetidos\n");
- }else{
- printf("No hay repetidos\n");
- }
- return (EXIT_SUCCESS);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement