Ir ao conteúdo
  • Cadastre-se

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


Posts recomendados

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

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...