A estrutura abaixo representa a célula de uma árvore em ling...
A estrutura abaixo representa a célula de uma árvore em linguagem C:
typedef struct _no{
int chave;
struct no *esq, *dir;
} no;
Assinale a alternativa correta sobre qual sequência será impressa ao executar um caminhamento na árvore abaixo, conforme o código escrito em linguagem C a seguir.Comentários
Veja os comentários dos nossos alunos
O código Recebe a "chave" ou "Raiz", percorre para "Esquerda" e após "Direita"
Raiz, Esquerda, Direita = Pré Ordem.
O problema aqui está no seguinte, como acessaremos um membro de uma estrutura de dados usando um ponteiro? Pois é simples. Para isso, basta usarmos o que chamamos de "seta". A "seta" consiste de um sinal de menos e um maior (->).
Portanto, podemos criar nosso struct do mesmo jeito de sempre e nosso ponteiro também. Mas, quando formos acessar um membro dessa estrutura usando um ponteiro nós não usaremos um ponto, mas uma seta.
Agora, há mais uma maneira de acessarmos um membro da estrutura usando um ponteiro. Esta outra forma consiste em indicar de qual ponteiro nos referimos colocando o entre parenteses, assim (*hoje). Dessa forma podemos acessar diretamente usando um ponto (.).
De acordo com a estrutura, a chave é o valor do nó atual, sendo arvore uma estrutura do tipo _no, que foi preenchido por alguma função de inserção de valores não identificada, cuja a árvore é ilustrada na questão.
A função ordem que recebe como parâmetro a estrutura arvore, possui o seguinte algoritmo:
1º - Testar se a árvore está vazia (sem elementos inseridos);
2º - Mostrar o valor do nó atual em que se encontra a chave.
3º - Ir para a própria função Ordem (recursividade), mas agora recebendo como parâmetro o valor do nó à esquerda.
4º - Se o valor à esquerda for nulo, a função retorna para a função Ordem anterior que a chamou.
5º - Ir novamente para a própria função Ordem (recursividade), porém, o parâmetro agora será o valor do nó à direita.
6º - Se caso o valor também for nulo, a função retorna para a função Ordem anterior que a chamou.
7º - Continua a rotina de acesso a própria função, pela esquerda e depois pela direita, até todas as opções que foram chamadas não terem mais valores a serem apresentados, retornando enfim para a primeira função Ordem que contém como valor chave o valor do nó raiz.
Como o colega Guilherme Ricarte falou em baixo, a referência struct arvore->chave, arvore->esq e arvore->dir é equivalente *arvore.chave, *arvore.esq e *arvore.dir. Ele simplificam o uso de um ponteiro.
Raiz Esquerda Direita = Pré ordem
Esquerda Raiz Direita = Em ordem
Esquerda Direita Raiz = Pós Ordem
Irei mostrar o método que eu faço esse tipo de questão.
Atenção, tudo que o pessoal aqui embaixo escreveu eu vejo como correto, porém não fizeram de fato o passo a passo.
if(arvore != NULL)
- testar se árvore esta vazia
printf("%d", arvore->chave);
- mostrar valor atual = A
ordem(arvore->esq);
- agora Chave = B
deveremos ir ordem à esquerda até encontrar valor nulo
ordem(arvore->esq);
- agora Chave = C
ordem(arvore->esq);
- não tem Chave à esquerda de C testamos a próxima ordem em C
- ordem(arvore->dir);
- não tem Chave à direita de C, já que verificamos esquerda e direita, então voltamos a Chave anterior B
ordem(arvore->esq);
- já fizemos ordem esquerda de B
ordem(arvore->dir);
- agora Chave = D
ordem(arvore->esq);
ordem(arvore->dir);
não tem valor à esquerda, nem à direita de D volta a Chave anterior B
já fizemos esquerda e direita de B então voltamos à Chave A
já fizemos esquerda de A então faremos ordem direita
ordem(arvore->dir);
- agora Chave = E
ordem(arvore->esq);
- agora aqui veja que eu voltei ordem à esquerda, pois devemos começar da esquerda para direita de cada Chave
- agora Chave = X
não tem valor à esquerda, nem à direita de X volta a Chave anterior E
já fizemos esquerda de E então faremos ordem direita
ordem(arvore->dir);
- agora Chave = Y
a partir daqui não precisa mais, porém eu vou fazer só pra finalizar
- não tem valor à esquerda, nem à direita de Y volta a Chave anterior E
- já fizemos esquerda e direita de E então voltamos à Chave A
- já fizemos esquerda e direita de A
- Finalizando
ABCDEY
Atenção, esse é o método que eu sempre resolvo as questões, caso veja algum erro ou queira tirar alguma dúvida, só me chamar.
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo