Jump to content
Fórum Script Brasil
  • 0

Imprimir nível da árvore e liberar memória


Question

Implementar em C uma árvore binária de pesquisa que armazena valores
do  tipo  inteiro.  O  programa  deve  oferecer  as  seguintes  opções  para  o
usuário:
1) Inserir um elemento (informado pelo usuário);
2) Buscar um elemento (é fornecida uma chave e a função informa se
encontrou ou não o elemento);
3) Imprimir o conteúdo da árvore (ao selecionar essa opção devem ser
mostrados  na  tela  os  dados  com  o  caminhamento  pré-fixado  a
esquerda);
4) Imprimir o nível da árvore;
5) Liberar a árvore da memória e encerrar.

Meu código é este, porém tenho dúvidas em como fazer o item 4 e 5.

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include "arvore.h"
struct arvore {
    struct _arvore *esq;
    int valor;
    struct arvore *dir;
};
typedef struct arvore a;

a *raiz = NULL;

void Inserir(int x){
    a *novo = NULL;
    a *aux = NULL, *auxOld = NULL;

    novo = malloc (sizeof(a));

    novo -> valor = x;
    novo -> esq = NULL;
    novo -> dir = NULL;

    if (raiz == NULL){
        raiz = novo;
    }
    else {
        aux = raiz;
        while (aux != NULL){
            auxOld = aux;
            if (x < aux -> valor){
                aux = aux -> esq;
            }
            else {
                aux = aux -> dir;
            }
            if (x < auxOld -> valor){
                auxOld -> esq = novo;
            }
            else {
                auxOld -> dir = novo;
            }
        }
    }
}
void  Buscar(int x){
    setlocale (LC_ALL, "");
    a *aux = NULL;
    aux = raiz;
    while (aux != NULL) {
        if (x == aux -> valor) {
            printf("Elemento encontrado.\n");
        return;
        }
        else if (x < aux -> valor){
            aux = aux -> esq;
        }
        else {
           aux = aux -> dir;
        }
        if (aux == NULL){
            printf("Elemento não encontrado.\n");
        }
    }
}
void PrefixEsq(a *aux){
    if (aux == NULL){
        return;
    }
    printf("%d ", aux -> valor);
    PrefixEsq(aux -> esq);
    PrefixEsq(aux -> dir);
}
void PrefixDir(a *aux) {
  if (aux == NULL)
    return;
  printf("%d ", aux -> valor);
  PrefixDir(aux -> dir);
  PrefixDir(aux -> esq);
}
void ImprimirPreEsq(){
    PrefixEsq(raiz);
    printf("\n");
}

 

Edited by eduarda_dasilveira
Link to post
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      148681
    • Total Posts
      644509
×
×
  • Create New...