Questão 36 Uma árvore binária é declarada em C como:
typedef struct no *apontador;
struct no{
int valor;
apontador esq, dir;
};
onde esq e dir representam ligações para os filhos esquerdo e direito de um nó da árvore, respectivamente.
Qual das seguintes alternativas é uma implementação correta da operação que inverte as posições dos filhos esquerdo e direito de um nó p da árvore, onde t é um apontador auxiliar.
a) t = p;
p->esq = p->dir;
p->dir = p->esq;
b) p->dir = t;
p->esq = p->dir;
p->dir = t;
c) p->esq = p->dir;
t = p->esq;
p->dir = t;
d) t = p->dir;
p->esq = p->dir;
p->dir = t;
e) t = p->dir;
p->dir = p->esq;
p->esq = t;
Gabarito: e (Selecione o texto a esquerda para ver a resposta ou consulte o fim do post).
Explicação: Nossa explicação será através de uma ilustração. Vamos ilustrar as operações da alternativa e.
Começaremos com um ponteiro vermelho representando p->esq e um ponteiro azul representando p->dir e teremos o ponteiro verde que representará o t. E o nosso objetivo será colocar o vermelho aonde está o azul e vice-versa, se através dessas operações conseguirmos fazer isto significa que invertemos o filho esquerdo com o direito e estas operações são as corretas.
Então vamos tentar:
Após a execução das 3 operações da alternativa e alcançamos o nosso objetivo.
Não concorda?
Comente, opine e demonstre seu conhecimento!
Gabarito: e
typedef struct no *apontador;
struct no{
int valor;
apontador esq, dir;
};
onde esq e dir representam ligações para os filhos esquerdo e direito de um nó da árvore, respectivamente.
Qual das seguintes alternativas é uma implementação correta da operação que inverte as posições dos filhos esquerdo e direito de um nó p da árvore, onde t é um apontador auxiliar.
a) t = p;
p->esq = p->dir;
p->dir = p->esq;
b) p->dir = t;
p->esq = p->dir;
p->dir = t;
c) p->esq = p->dir;
t = p->esq;
p->dir = t;
d) t = p->dir;
p->esq = p->dir;
p->dir = t;
e) t = p->dir;
p->dir = p->esq;
p->esq = t;
Gabarito: e (Selecione o texto a esquerda para ver a resposta ou consulte o fim do post).
Explicação: Nossa explicação será através de uma ilustração. Vamos ilustrar as operações da alternativa e.
Começaremos com um ponteiro vermelho representando p->esq e um ponteiro azul representando p->dir e teremos o ponteiro verde que representará o t. E o nosso objetivo será colocar o vermelho aonde está o azul e vice-versa, se através dessas operações conseguirmos fazer isto significa que invertemos o filho esquerdo com o direito e estas operações são as corretas.
Então vamos tentar:
Após a execução das 3 operações da alternativa e alcançamos o nosso objetivo.
Não concorda?
Comente, opine e demonstre seu conhecimento!
Gabarito: e
Muito legal essa 'série' do PósComp Filipe, parabéns!
@Mauro, obrigado, assine nosso feed e fique atento nas novas questões! =]