arvore binaria de busca
no *criar(){ return NULL; //duvida nesta parte esta certo isso ?
}
int inserir(no **raiz,int elem){ //como *raiz ja é um ponteiro ** if(*raiz == NULL){ *raiz = malloc(sizeof(no)); if(raiz == NULL) //se o conteudo da raiz for NULL não alocou return 0; (*raiz)->inf = elem; (*raiz)->dir = NULL; (*raiz)->esq = NULL; return 1; } //caso aonde nao é inserido na raiz == NULL. if(elem inf) inserir(&((*raiz)->esq),elem); if(elem >(*raiz)->inf) inserir(&((*raiz)->dir),elem);
}
no *pesquisar(no *raiz,int elem){ //é do tipo no pq vai retornar um proprio elemento de no ou //pesquisar é um ponteiro do tipo no que retornara um elem de raiz. if(raiz == NULL) return NULL; if(elem == raiz->inf) return raiz; if(elem < raiz->inf) return pesquisar(raiz->esq,elem); if(elem > raiz->inf) return pesquisar(raiz->dir,elem);
}
void emOrdem(no *raiz){ if(raiz != NULL){ emOrdem(raiz->esq); printf( "%d\n",raiz->inf); emOrdem(raiz->dir); }
}
void preOrdem(no *raiz){ if(raiz != NULL){ printf( "%d\n",raiz->inf); preOrdem(raiz->esq); preOrdem(raiz->dir); }
}
void posOrdem(no *raiz){ if(raiz != NULL){ posOrdem(raiz->esq); posOrdem(raiz->dir); printf( "%d\n",raiz->inf); }
}
no *maiordireita(no **raiz){ if((*raiz)->dir != NULL) return maiordireita(&(*raiz)->dir); else{ no *aux = *raiz; if((*raiz)->esq != NULL) // se nao houver essa verificacao, esse nó vai perder todos os seus filhos da esquerda! *raiz = (*raiz)->esq; else *raiz = NULL; return aux; }
}
no *menoresquerda(no **raiz){ if((*raiz)->esq