Ir ao conteúdo
  • Cadastre-se
Eduarda Menezes da Silveira

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

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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...