Logo Passei Direto
Buscar
páginas com resultados encontrados.
páginas com resultados encontrados.
Algoritmos e Estrutura de Dados III
Lista de exercício 1
1.(a)
(b) A altura do nó de chave 7 é 3. A chave 7 encontra-se no 2º nível considerando a raiz como nível 0. A altura da
árvore é igual a 5.
(c) Existe, e seu comprimento é igual a 3. Não.
(d) É o nó de chave 27. Os filhos são a chave 5 e 10. 34 e 39 são nós irmãos.
(e) Pré -Ordem: 22,12,7,5,4,3,6,10,14,27,24,23,25,32,37,34,39.
In-Ordem: 3,4,5,6,7,10,12,14,22,23,24,25,27,32,34,37,39.
Pós-Ordem: 3,4,6,5,10,7,14,12,23,25,24,34,3 9,3 7,32,27,22.
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

(f)
2.
(a)
(b) ( -,4,/,-,*,8,5,2,+,3,*,7,8 ) -> Foi obtida a partir do desenho da árvore, realizada para a expressão infixada. A
expressão prefixada consiste em pegar a raiz, imprimir, chave a esquerda, imprimir, chave a direita, imprimir, e
assim sucessivamente.
(c) ( 4,8,5,*,2,-,3,7,8,*,+,/,- ) -> Foi obtida do mesmo modo que no exercício b, a partir do desenho da
árvore, porém, na expressão posfixada, deve-se começar a impressão dos elementos, a partir da esquerda, depois
direita, e assim raiz.
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

3.
int alturaArvore(No* p)
{
if (p == NULL) return -1;
int alturaEsq = alturaArvore(p->Esq);
int alturaDir = alturaArvore(p->Dir);
if (alturaEsq > alturaDir)
return alturaEsq + 1;
else return alturaDir + 1;
}
4.
int NRecInsere(Registro x, Apontador *p)
{
Apontador pAux;
Apontador pAnt=NULL;
pAux=*p;
while(pAux!=NULL)
{
pAnt= pAux;
if((pAux)->Reg.Chave > x.Chave)
{
(pAux)=(pAux)->Esq;
}else
if((pAux)->Reg.Chave < x.Chave)
{
(pAux)=(pAux)->Dir;
}else
{
printf("Erro : Registro ja existe na arvore\n");
return -1;
}
}
if(pAux==NULL)
{
Apontador pNo = (Apontador)malloc(sizeof(No));
pNo->Reg = x;
pNo->Esq = NULL;
pNo->Dir = NULL;
if(pAnt==NULL)
*p=pNo;
else if(x.Chave < pAnt->Reg.Chave)
pAnt->Esq = pNo;
else
pAnt->Dir = pNo;
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

return 0;
}
}
5.
void ListarTabulado(No *p,int nivel)
{
int i;
nivel++;
if (p != NULL)
{
for(i=1;i<nivel;i++)
{
printf(" ");
}
printf("%d\n",p->Reg.Chave);
ListarTabulado(p->Esq,nivel);
ListarTabulado(p->Dir,nivel);
}else printf("---\n");
}
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

Algoritmos e Estrutura de Dados III
Lista de exercício 1
1.(a)
(b)	A altura do nó de chave 7 é 3. A chave 7 encontra-se no 2º nível considerando a raiz como nível 0. A altura da árvore é igual a 5.
(c)	Existe, e seu comprimento é igual a 3. Não.
(d)	É o nó de chave 27. Os filhos são a chave 5 e 10. 34 e 39 são nós irmãos.
(e)	Pré-Ordem: 22,12,7,5,4,3,6,10,14,27,24,23,25,32,37,34,39.
	In-Ordem: 3,4,5,6,7,10,12,14,22,23,24,25,27,32,34,37,39.
	Pós-Ordem: 3,4,6,5,10,7,14,12,23,25,24,34,39,37,32,27,22.
(f) 
2.
(a)
(b)	( -,4,/,-,*,8,5,2,+,3,*,7,8 ) -> Foi obtida a partir do desenho da árvore, realizada para a expressão infixada. A expressão prefixada consiste em pegar a raiz, imprimir, chave a esquerda, imprimir, chave a direita, imprimir, e assim sucessivamente.
(c)	( 4,8,5,*,2,-,3,7,8,*,+,/,- ) -> 	Foi obtida do mesmo modo que no exercício b, a partir do desenho da árvore, porém, na expressão posfixada, deve-se começar a impressão dos elementos, a partir da esquerda, depois direita, e assim raiz.
3.
int alturaArvore(No* p)
{ 
 if (p == NULL) return -1;
 int alturaEsq = alturaArvore(p->Esq); 
 int alturaDir = alturaArvore(p->Dir); 
 if (alturaEsq > alturaDir)
 return alturaEsq + 1; 
 else return alturaDir + 1; 
} 
4. 
int NRecInsere(Registro x, Apontador *p)
{
 Apontador pAux;
 Apontador pAnt=NULL;
 pAux=*p; 
 while(pAux!=NULL)
 {
 pAnt= pAux;
 if((pAux)->Reg.Chave > x.Chave)
 {
 (pAux)=(pAux)->Esq;
 }else
 if((pAux)->Reg.Chave < x.Chave)
 {
 (pAux)=(pAux)->Dir;
 }else
 {
 printf("Erro : Registro ja existe na arvore\n");
 return -1; 
 }
 }
 
 if(pAux==NULL)
 {
 Apontador pNo = (Apontador)malloc(sizeof(No));
 pNo->Reg = x;
 pNo->Esq = NULL;
 pNo->Dir = NULL;
 if(pAnt==NULL)
 *p=pNo;
 else if(x.Chave < pAnt->Reg.Chave)
			pAnt->Esq = pNo;
		else
			pAnt->Dir = pNo;
 return 0;
 } 
}
5.
 void ListarTabulado(No *p,int nivel)
{
 int i;
 nivel++;
 if (p != NULL)
 {
 for(i=1;i<nivel;i++)
 {
 printf(" ");
 }
 
 printf("%d\n",p->Reg.Chave);
 ListarTabulado(p->Esq,nivel);
 ListarTabulado(p->Dir,nivel);
 }else printf("---\n");
}