Ir para conteúdo
Fórum Script Brasil
  • 0

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


eduarda_dasilveira

Pergunta

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");
}

 

Editado por eduarda_dasilveira
Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...