C++ (C++11 ou superior)
make build
make run
# Ou com outro arquivo de entrada:
make run INPUT="outro_arquivo.txt"Ou manualmente:
g++ -o programa.exe ABB.cpp
./programa.exe entrada.txtTodas as estruturas e funcoes estao no arquivo ABB.cpp.
Representa um no da arvore binaria de busca.
valor— valor inteiro armazenado no noprof— profundidade do no (raiz = 0)esq— ponteiro para o filho esquerdodir— ponteiro para o filho direito
Implementa a arvore binaria de busca persistente com node copying.
Metodos publicos:
inserir(int valor)— insere um valor na ABB, criando uma nova versao por node copyingremover(int valor)— remove um no com o valor dado, criando uma nova versao por node copyingsucessorMaior(int valor, int versao)— retorna o menor valor estritamente maior que o valor dado na versao indicadaimprimir(int versao, ofstream& saida)— imprime os elementos da versao em ordem crescente no formatovalor,profundidadegetRaiz(int versao)— retorna a raiz da versao indicadaliberar()— desaloca todos os nos de todas as versoes (usa um conjunto para evitar double-free de nos compartilhados)
Metodos privados (auxiliares):
novoNo(int valor, int prof)— cria um novo nocopiarNo(No* original, int prof)— cria uma copia rasa de um no (shallow copy para node copying)inserirNC(No* raiz, int valor, int prof)— insercao recursiva com node copyingremoverNC(No* raiz, int valor)— remocao recursiva com node copyingminNo(No* no)— encontra o menor no de uma subarvoreimprimirRec(No* no, bool& primeiro, ofstream& saida)— impressao recursiva em ordemcoletarNos(No* no, set<No*>& todos)— coleta todos os ponteiros de nos para liberacao segura
Le o arquivo de entrada passado como argumento e processa os comandos:
INC x— insere x na versao atual, criando nova versao por node copyingREM x— remove x da versao atual, criando nova versao por node copyingSUC x v— imprime o sucessor estritamente maior que x na versao vIMP v— imprime todos os elementos da versao v no formatovalor,profundidade
O vetor roots[100] dentro da classe armazena ate 100 raizes de versoes. Nos compartilhados entre versoes nao sao duplicados (persistencia por node copying).