Ir ao conteúdo
  • Cadastre-se

C código em c Arvore Binária


Anny Silva

Posts recomendados

 

 

alguém poderia me mostrar exemplos de código desse exercicio:

 

a)Soma dos elementos menores que a raiz, ou seja,soma dos elementos da subárvore esquerda.

b)Média Geométrica dos elementos da árvore

c)Média Ponderadados elementos da árvore usando o nível como peso. (raizequivale aonível1, e assim sucessivamente)


d)Porcentagem de elementos impares na árvoreusando passagem de parâmetropor referência.


e)Valor médio entre o menor elemento e o maior elemento usando variáveis globais

Link para o comentário
Compartilhar em outros sites

@Anny Silva já criou alguma arvore em seus programas? 

 

tendo colocado os nós na árvore ao percorrer in-order os nós vem na ordem. Você sempre sabe qual é a raiz então basta listar até a raiz.

 

os outros parâmetros saem naturalmente do mesmo percurso: apenas percorra a tal árvore até o fim. Tudo que tiver até a raiz é menor. E vá fazendo as contas para os valores sintéticos, por eemplo somando para calcular a média

Link para o comentário
Compartilhar em outros sites

@Anny Silva é como a média aritmética, mas usando produtos. Multiplique todos os N caras e calcule a raiz N-ésima do produto. Ao invés de somar e dividir pelo número, como na média aritmética.

 

E não é a média geométrica da árvore binária. Isso nada tem a ver com árvores. Trata-se apenas da média dos elementos que por acaso estão gravados nessa estrutura. Qualquer percurso na árvore te dá a coleção de valores, que podiam estar num vetor.

 

C não vai mudar isso em nada"

e só um valor estatístico de uma série de dados. Use * para multiplicar e pow() para a raiz.

 

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Anny Silva Nem perto disso.

 

O que é chave?

 

Não tem nenhum produto, nenhuma raiz, não multiplicou nada.

 

E a média nada tem a ver com a árvore, com eu disse.

 

8 minutos atrás, Anny Silva disse:

media=media+aux+chave;

 

?

 

33 minutos atrás, arfneto disse:

Multiplique todos os N caras e calcule a raiz N-ésima do produto. Ao invés de somar e dividir pelo número, como na média aritmética.

 

E não é a média geométrica da árvore binária. Isso nada tem a ver com árvores. Trata-se apenas da média dos elementos que por acaso estão gravados nessa estrutura. Qualquer percurso na árvore te dá a coleção de valores, que podiam estar num vetor.

 

C não vai mudar isso em nada"

e só um valor estatístico de uma série de dados. Use * para multiplicar e pow() para a raiz.

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

tentei fazer o codigo e media ponderada na arvore binária !
estou indo no caminho certo?

 

void  mediaponderada (arvore*p);
{
apontador aux;
float mediap;
int posicao;r;
mediap=0;r=0;
posicao=1;
aux=p->raiz->prox;
while(aux!=NULL)
{
mediap=mediap+aux+chave*pow(mg,1.0/n) ;
r=r+posicao;
posicao++;
aux=aux->prox;
}
mediap=mediap/r;
return mediap;
}


 

Link para o comentário
Compartilhar em outros sites

Está indo para o caminho errado. Se é um produto porque não está multiplicando???

 

Não devia abrir vários tópicos com o mesmo tema, como te falei. Leu o que te disse sobre simplesmente percorrer a árvore e fazer as contas????

 

Imagine o exemplo clássico

 

3 e 4 e as médias

 

a média aritmética é 3.5, 3+4 = 5 / 2 = 3.5

 

a média geométrica é  3.87 ou raiz quadrada de 3 * 5... ou 3 * 5 elevado a 1/2

 

Apenas escreva um programa que percorre a árvore... Vai ver cada elemento uma vez. Faça as contas para avaliar os parâmetros de que precisa. Nada mais.

 

Percursos 

 

Exemplos tem em todo lugar e várias linguagens e deve ter visto na aula. Seu curso tem um livro-texto? 

 

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

5 horas atrás, Anny Silva disse:

tentei fazer o codigo e media ponderada na arvore binária !
estou indo no caminho certo?

 

Não. Acho que devia fazer como te expliquei no post inicial. Percorra a árvore calculando as coisas

 

    while (aux != NULL)
    {
        mediap = mediap + aux + chave * pow(mg, 1.0 / n);
        r      = r + posicao;
        posicao++;
        aux = aux->prox;
    }

 

Esse é o loop onde espera que seu programa consuma os dados da árvore.

 

aux é um apontador? Um ponteiro? Não escreva assim. Só vai te confundir. E aux é um nome pouco feliz. NUNCA crie tipos para ponteiros. Isso foi resolvido em C nos anos '60. Use um asterisco.

 

Poste o código todo, algo minimamente compilável.

 

Escreva em torno dos dados

 

Não misture a árvore com essas coisas que precisa calcular.

 

Imagine uma função assim

 

	float*    prox_dado ( Dado* dado);

 

Que devolve o próximo dado da árvore ou NULL.

 

Você pode só ir chamando isso e MULTIPLICANDO e terá a sua média ponderada.

 

Algo assim

 

    double produto = 0.;
    int    N       = 0;
    int*   prox    = NULL;
    while ((prox = proximo_dado(Dados* dados)) != NULL)
    {   // veio algo
        produto *= (*prox);  // multiplica
        N += 1; // conta o item
    };
    double ponderada = produto * pow( 1,N);
    

 

Mas claro que deve aproveitar a oportunidade e já ir preparando todos os valores que precisa extrair da arvore, como te disse antes.

 

 

  • Curtir 1
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...