Escolar Documentos
Profissional Documentos
Cultura Documentos
#include <cstring>
#include <sstream>
#include "ArvBin.h"
ArvBin::ArvBin()
{
raiz = NULL;
}
int ArvBin::getRaiz()
{
if (raiz != NULL)
return raiz->getInfo();
else
{
cout << "Árvore vazia!" << endl;
exit(1);
}
}
void ArvBin::anulaRaiz()
{
raiz = NULL;
}
void ArvBin::montaArvore()
{
if(!vazia())
cout << "Arvore jah montada. So eh possivel a insercao de nos." << endl;
else
{
cout << "Montagem da arvore em pre-ordem:" << endl;
raiz = auxMontaArvore();
}
}
NoArv* ArvBin::auxMontaArvore()
{
string linha;
cout << "Valor: ";
cin >> linha;
if(linha != "NULL" && linha != "null")
{
istringstream ent(linha);
int valor;
ent >> valor;
NoArv *p = new NoArv();
p->setInfo(valor);
cout << "Esquerda" << endl;
p->setEsq(auxMontaArvore());
cout << "Volta no noh " << p->getInfo() << endl;
cout << "Direita" << endl;
p->setDir(auxMontaArvore());
cout << "Volta no noh " << p->getInfo() << endl;
return p;
}
else
return NULL;
}
void ArvBin::insere(int x)
{
raiz = auxInsere(raiz, x);
}
bool ArvBin::vazia()
{
return (raiz == NULL);
}
bool ArvBin::busca(int x)
{
return auxBusca(raiz, x);
}
ArvBin::~ArvBin()
{
raiz = libera(raiz);
}
void ArvBin::preOrdem()
{
cout << "Arvore Binaria em Pre-Ordem: ";
auxPreOrdem(raiz);
}
int ArvBin::contaNos()
{
if(vazia()){
return 0;
} else {
return auxContaNos(raiz);
}
int ArvBin::contaNosFolha()
{
if(vazia()){
return 0;
} else {
return auxContaNosFolhas(raiz);
}
}
int ArvBin::altura()
{
if(vazia())
return 0;
else
return auxAltura(raiz);
}
if(p == NULL){
return -1;
}else{
he = auxAltura(p->getEsq());
hd = auxAltura(p->getDir());
return 1 + maior(he,hd);
}
}
int ArvBin::contaImpar()
{
if(vazia()){
cout << "arvore vazia!" << endl;
return -1;
}else {
return auxContaImpar(raiz);
}
}
int ArvBin::contaImparFolhas()
{
if(vazia()){
cout << "arvore vazia!" << endl;
return -1;
}else {
return auxContaImparFolhas(raiz);
}
}
if(vazia()){
cout << "arvore vazia!" << endl;
}else if(x<=h){
auxImpNivel(raiz,0,x);
}else{
cout << endl << "nivel invalido!" << endl;
}
}
float ArvBin::mediaNivel(int x)
{
int soma=0;
int n=0;
if(vazia()){
cout << "arvore vazia!" << endl;
return 0;
}else {
auxMediaNivel(raiz, &soma, &n, x);
}
return (soma/n);
}
int ArvBin::minimo()
{
int m = raiz->getInfo();
auxMinimo(raiz,&m);
return m;
}
int ArvBin::maximo()
{
int m = raiz->getInfo();
auxMaximo(raiz,&m);
return m;
}
void ArvBin::inverte()
{
if(vazia()){
cout << "arvore vazia!!" << endl;
}else{
auxInverte(raiz);
}
}
auxInverte(p->getEsq());
auxInverte(p->getDir());
}else{
auxInverte(p->getEsq());
auxInverte(p->getDir());
}
}
}
int ArvBin::noMaisEsq()
{
if(vazia()){
cout << "arvore vazia!!" << endl;
return 0;
}else{
return auxNoEsq(raiz);
}
}
int ArvBin::noMaisDir()
{
if(vazia()){
cout << "arvore vazia!!" << endl;
return 0;
}else{
return auxNoDir(raiz);
}
}
bool ArvBin::ehABB()
{
return auxEhABB(raiz);
}