• Matéria: Informática
  • Autor: brunooliveirachaves
  • Perguntado 3 anos atrás

Existem várias formas de se implementar uma árvore binária. A mais simples delas é usar um vetor de nós. Dessa forma, cada nó possui pelo menos três valores: uma referência para o pai do nó, uma referência para o filho à esquerda do nó e mais uma outra referência para o filho à direita do respectivo nó. O atributo "pai" vai apontar para a posição na qual o pai do nó se encontra, no vetor. O atributo "esquerda" vai armazenar a posição da raiz da sub-árvore à esquerda do nó, e o atributo "direita" guarda a posição da raiz da sub-árvore direita do nó, no vetor. Além disso, é relevante estabelecer um atributo "dado" que irá armazenar o conteúdo do nó.

É possível adicionar algumas regras à inserção de dados em uma árvore para que ela se torne ordenada. Assim, sempre que um novo dado estiver para ser adicionado junto à árvore, ele será comparado com o nó raiz. Se ele é menor do que a raiz, deverá ser adicionado na sub-árvore esquerda, caso contrário na sub-árvore direita.

Considere que, no seu primeiro estágio, ao realizar um teste no seu programa que implementa árvores binárias, você inseriu os números de seu RA (da esquerda para a direita) como se cada algarismo fosse um nó na árvore. Dessa forma, altere o código-fonte dado para que seu programa, durante a execução, monte uma árvore binária a partir dos dígitos de seu RA. O seu programa não deve realizar a inserção automaticamente ordenada, ou seja, não é preciso desenvolver um método que realize a inserção ordenadamente. Você mesmo pode construir a árvore (via inserções simples, porém seguindo as regras de inserção ordenada), de maneira a compor a árvore ordenada com os números de seu RA. Além disso, você precisará criar uma função que seja capaz de realizar o percurso pré-ordem na árvore recém-criada, partindo da raiz e imprimindo na tela os nós visitados de acordo com esse método.

Por exemplo, considere que seu RA é igual a 221979435. Abaixo temos um exemplo de como sua árvore ordenada deveria ser, bem como o resultado do caminhamento pré-ordem quando executado a partir da raiz da respectiva árvore.



Observação: A correção será feita em ambiente Bloodshed Dev C++, no padrão C ANSI. Assim, caso o aluno tenha desenvolvido seu código em outra IDE/Compilador, é importante que o aluno garanta que seu código também é compilável/executável em ambiente Dev C++. Essa é uma responsabilidade do aluno, e não da equipe de correção. Enviar seu código-fonte completo, com extensão “.c”.


Anônimo: ⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔
❤❤Assessoria Acadêmica 041 - Alexia S.❤❤

****Precisando de ajuda c'hamar *****

*******(41) 9️⃣**2️⃣2️⃣6️⃣~-1️⃣4️⃣8️⃣1️⃣*******

⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔
Anônimo: ⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔
❤❤Assessoria Acadêmica 041 - Alexia S.❤❤

****Precisando de ajuda c'hamar *****

*******(41) 9️⃣**2️⃣2️⃣6️⃣~-1️⃣4️⃣8️⃣1️⃣*******

⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔
Anônimo: ⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔
❤❤Assessoria Acadêmica 041 - Alexia S.❤❤

****Precisando de ajuda c'hamar *****

*******(41) 9️⃣**2️⃣2️⃣6️⃣~-1️⃣4️⃣8️⃣1️⃣*******

⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔
Anônimo: ...
Anônimo: .
.
.

✅--------------- MAPA —------------✅
4️⃣3️⃣-9️⃣ 9️⃣ 8️⃣ 0️⃣ 3️⃣ 2️⃣ 1️⃣ 7️⃣ 7️⃣
—------------ EXCLUSIVO —-------------
4️⃣3️⃣-9️⃣ 9️⃣ 8️⃣ 0️⃣ 3️⃣ 2️⃣ 1️⃣ 7️⃣ 7️⃣
—------- NOTA ALTA/MÁXIMA —-------
4️⃣3️⃣-9️⃣ 9️⃣ 8️⃣ 0️⃣ 3️⃣ 2️⃣ 1️⃣ 7️⃣ 7️⃣

.
.
.

*Precisando de Ajuda*
*➖* - *➖ *-* ➖ *- *➖*-*➖* *-* ➖* -* ➖ *-* ➖
No 4️⃣3️⃣-9️⃣ 9️⃣ 8️⃣ 0️⃣ 3️⃣ - 2️⃣ 1️⃣ 7️⃣ 7️⃣Você encontra esse mapa completo! Assessoria especializada em mapas Unicesumar. ✅
Garanta sua nota e peça já o seu mapa
Anônimo: >>> ✅ Olá meu amigo (a), tudo bem contigo?‍ ‍♂️✅ <<<

---------------------------------------------------------------------------------

✅ MATERIAL INDIVIDUAL
✅ SEM PLÁGIO
✅ NOTA MÁXIMA
✅ DESENVOLVIDO COM RESPONSABILIDADE PARA VOCÊ

>>> WATTSAPP - +55 49 9112-4798 ‍♂️✅ <<<

---------------------------------------------------------------------------------
Anônimo: >>> ✅ Olá meu amigo (a), tudo bem contigo?‍ ‍♂️✅ <<<

---------------------------------------------------------------------------------

✅ MATERIAL INDIVIDUAL
✅ SEM PLÁGIO
✅ NOTA MÁXIMA
✅ DESENVOLVIDO COM RESPONSABILIDADE PARA VOCÊ

---------------------------------------------------------------------------------
Anônimo: >>> ✅ Olá meu amigo (a), tudo bem contigo?‍ ‍♂️✅ <<<

---------------------------------------------------------------------------------

✅ MATERIAL INDIVIDUAL
✅ SEM PLÁGIO
✅ NOTA MÁXIMA
✅ DESENVOLVIDO COM RESPONSABILIDADE PARA VOCÊ

>>> WATTSAPP - +55 49 9112-4798 ‍♂️✅ <<<

---------------------------------------------------------------------------------
Anônimo: >>> ✅ Olá meu amigo (a), tudo bem contigo?‍ ‍♂️✅ <<<

---------------------------------------------------------------------------------

✅ MATERIAL INDIVIDUAL
✅ SEM PLÁGIO
✅ NOTA MÁXIMA
✅ DESENVOLVIDO COM RESPONSABILIDADE PARA VOCÊ

>>> WATTSAPP - 4️⃣9️⃣-9️⃣9️⃣1️⃣1️⃣2️⃣4️⃣7️⃣9️⃣8️⃣ ‍♂️✅ <<<

---------------------------------------------------------------------------------
joao131465494: *Precisando de Ajuda*
*➖* - *➖ *-* ➖ *- *➖*-*➖* *-* ➖* -* ➖ *-* ➖
No 4️⃣3️⃣-9️⃣ 9️⃣ 8️⃣ 0️⃣ 3️⃣ - 2️⃣ 1️⃣ 7️⃣ 7️⃣Você encontra esse mapa completo! Assessoria especializada em mapas Unicesumar. ✅
Garanta sua nota e peça já o seu mapa

⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔
➖➖➖➖ MAPAS E ATIVIDADES ➖➖➖
→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→
➖*➖
➖*➖
4️⃣3️⃣-9️⃣ 9️⃣ 8️⃣ 0️⃣ 3️⃣ - 2️⃣ 1️⃣ 7️⃣ 7️⃣➖➖*
➖*➖
➖*➖
➖*➖
➖*➖
⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔⛔

Respostas

respondido por: bhebrumatti
1

Uma árvore binária se caracteriza por ser um conjunto de registros que satisfaz certas condições. É uma estrutura de dados mais geral.

Árvore binária

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#define E 0

#define D 1

#define R -1

typedef struct NO {

int dado;

struct NO *esq;

struct NO *dir;

struct NO *pai;

} NO;

//Tipo árvore

typedef struct ARVORE{

NO *raiz;

}ARVORE;

ARVORE a;

void inicializaArvore(ARVORE arv);

void inicializaNo(NO* n, int val);

void insereNoArvoreOrdenada(int valor);

void preOrdem(NO* raiz);

void emOrdem(NO* raiz);

void posOrdem(NO* raiz);

void inicializaArvore(ARVORE arv)

{

arv.raiz = NULL;

}

void inicializaNo(NO* n, int val){

if(!n)

{

printf("Falha de alocacao.\n");

return;

}

n->pai = NULL;

n->esq = NULL;

n->dir = NULL;

n->dado = val;

}

void insereNoArvoreOrdenada(int valor)

{

NO* corrente = a.raiz;

NO* pai;

NO* novoNo = (NO*) malloc(sizeof(NO));

inicializaNo(novoNo, valor);

printf("Inserindo no %d. \n", novoNo->dado);

if(corrente == NULL)

{

a.raiz = novoNo;

printf("No inserido na raiz. \n");

return;

}

while(corrente){

pai = corrente;

if(novoNo->dado < corrente->dado){

 corrente = corrente->esq;

 if(!corrente){

  printf("No inserido à esquerda do no %d. \n", pai->dado);

  pai->esq = novoNo;

  return;

 }

}

else{

 corrente = corrente->dir;

 if(!corrente){

  printf("No inserido à direita do no %d. \n", pai->dado);

  pai->dir = novoNo;

  return;

 }

}

}

}

void preOrdem(NO* raiz){

if(raiz){

printf("%d \t", raiz->dado);

preOrdem(raiz->esq);

preOrdem(raiz->dir);

}

}

void emOrdem(NO* raiz){

if(raiz){

emOrdem(raiz->esq);

printf("%d \t", raiz->dado);

emOrdem(raiz->dir);

}

}

void posOrdem(NO* raiz){

if(raiz){

posOrdem(raiz->esq);

posOrdem(raiz->dir);

printf("%d \t", raiz->dado);

}

}

int main()

{

inicializaArvore(a);

insereNoArvoreOrdenada(2);

insereNoArvoreOrdenada(1);

insereNoArvoreOrdenada(0);

insereNoArvoreOrdenada(0);

insereNoArvoreOrdenada(0);

insereNoArvoreOrdenada(3);

insereNoArvoreOrdenada(0);

insereNoArvoreOrdenada(2);

insereNoArvoreOrdenada(5);

printf("\nBusca pre ordem: \n");

preOrdem(a.raiz);

}

Para saber mais sobre árvore binária, acesse: https://brainly.com.br/tarefa/17130737

#SPJ1

Anexos:
Perguntas similares