Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- typedef struct no {
- struct no * esq;
- int idade;
- struct no * dir;
- } t_no;
- typedef t_no* t_arvore;
- void exibirPreOrdem(t_arvore tree){
- if (tree!=NULL){
- printf("%d ", tree->idade);
- exibirPreOrdem(tree->esq);
- exibirPreOrdem(tree->dir);
- }
- }
- void exibirInOrdem(t_arvore tree){
- if (tree!=NULL){
- exibirInOrdem(tree->esq);
- printf("%d ", tree->idade);
- exibirInOrdem(tree->dir);
- }
- }
- void exibirPosOrdem(t_arvore tree){
- if (tree!=NULL){
- exibirPosOrdem(tree->esq);
- exibirPosOrdem(tree->dir);
- printf("%d ", tree->idade);
- }
- }
- int isVazia(t_arvore tree){
- return(tree == NULL);
- }
- t_no * criar (){
- t_no * novo;
- novo = (t_no*) malloc(sizeof(t_no));
- if (novo == NULL)
- return NULL;
- novo->esq = novo->dir = NULL;
- novo->idade = -1;
- return (novo);
- }
- int insereRaiz(t_arvore* tree, int idd){
- t_no* novo;
- if (*tree != NULL)
- return 0; // erro: ja existe raiz
- novo = criar();
- if (novo == NULL)
- return 0; // erro: memoria insuficiente
- novo->idade = idd;
- *tree = novo;
- return 1;
- }
- t_no *busca(t_arvore tree, int idd){
- t_no* achou;
- if(tree == NULL){
- return NULL;
- }
- if(tree->idade == idd){
- return tree;
- }
- achou = busca(tree->esq, idd);
- if(achou == NULL){
- achou = busca(tree->dir, idd);
- }
- return achou;
- }
- // Inserir um filho aa direita de um dado noh
- int insereDireita(t_arvore tree, int pai, int filho)
- {
- t_no *f, *p, *novo;
- // verifica se o elemento ja nao existe
- f = busca(tree,filho);
- if (f != NULL){
- return 0; // erro: dado ja existente
- }
- // busca o pai e verifica se ja nao possui filho direito
- p = busca(tree,pai);
- if(p == NULL){
- return 0; // erro: pai nao encontrado
- }
- if(p->dir != NULL){
- return 0; // erro: ja existe filho direito
- }
- novo = criar();
- if(novo == NULL){
- return 0; // erro: memoria insuficiente
- }
- novo->idade = filho;
- p->dir = novo;
- return 1;
- }
- // Inserir um filho a esquerda de um dado noh
- int insereEsquerda(t_arvore tree, int pai, int filho)
- {
- t_no *f, *p, *novo;
- // verifica se o elemento ja nao existe
- f = busca(tree,filho);
- if (f != NULL){
- return 0; // erro: dado ja existente
- }
- // busca o pai e verifica se ja nao possui filho direito
- p = busca(tree,pai);
- if(p == NULL){
- return 0; // erro: pai nao encontrado
- }
- if(p->esq != NULL){
- return 0; // erro: ja existe filho direito
- }
- novo = criar();
- if(novo == NULL){
- return 0; // erro: memoria insuficiente
- }
- novo->idade = filho;
- p->esq = novo;
- return 1;
- }
- int main(void){
- t_arvore mArv = NULL;
- t_arvore aux;
- insereRaiz(&mArv, 21);
- if(isVazia(mArv)){
- printf("Arvore vazia\n");
- }
- else{
- printf("Arvore nao vazia\n");
- }
- insereDireita(mArv, 21, 35);
- exibirPreOrdem(mArv);
- printf("\n");
- exibirInOrdem(mArv);
- printf("\n");
- exibirPosOrdem(mArv);
- printf("\n");
- insereEsquerda(mArv, 21, 12);
- exibirPreOrdem(mArv);
- printf("\n");
- exibirInOrdem(mArv);
- printf("\n");
- exibirPosOrdem(mArv);
- printf("\n");
- insereEsquerda(mArv, 12, 10);
- insereEsquerda(mArv, 35, 40);
- exibirPreOrdem(mArv);
- printf("\n");
- exibirInOrdem(mArv);
- printf("\n");
- exibirPosOrdem(mArv);
- printf("\n");
- aux = busca(mArv, 35);
- if(aux != NULL){
- printf("Valor %d encontrado\n", aux->idade);
- }
- else{
- printf("Valor %d nao encontrado\n", 35);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement