suzy Posted May 12, 2008 at 11:13 PM Report Share #184774 Posted May 12, 2008 at 11:13 PM Considere a seguinte definição: struct tree{ int valor; struct tree *esq, *dir; }; Escreva uma função recursiva em C que verifique se todos os valores armazenados numa árvore binária constituída por elementos do tipo struct tree são iguais. A função recebe como argumento um ponteiro para a raiz da árvore. Devolve 1 se os valores armazenados forem todos iguais, ou 0 caso não sejam. int funcao (struct tree *ptr) { if(ptr==NULL) return -1 else if(ptr->esq->valor==ptr->dir->valor) return 1 else return 0 } que acham esta correcto?? ? Link to comment Share on other sites More sharing options...
falk0n Posted May 12, 2008 at 11:48 PM Report Share #184779 Posted May 12, 2008 at 11:48 PM entao e onde está a recursividade ? boas programacoes Link to comment Share on other sites More sharing options...
skm Posted May 13, 2008 at 08:26 AM Report Share #184785 Posted May 13, 2008 at 08:26 AM Essa função so testes os primeiros 2 elementos. "There are two kinds of programmers. Those who write something to get the work done and those who want to write good code."João BrandãoWebsite e blog: http://jamab.blogspot.com/ Link to comment Share on other sites More sharing options...
DanielAmorim Posted May 13, 2008 at 09:49 AM Report Share #184790 Posted May 13, 2008 at 09:49 AM Essa tua função não está lá muito bem 😄 Como já foi dito não é recursiva, para o ser tem de invocar-se no seu corpo. Mesmo em termos de algoritmo não esta correcta, pois só estas a comparar dois nós do mesmo nível. Considera o seguinte exemplo: 1 / \ 2 2 / \ 3 3 Quando estás a fazer a primeira comparação tens de verificar que ValorPai == ValorEsquerda && ValorEsquerda == ValorDireita. Só se verificar estas duas condições podes avançar para as duas sub-arvores (da esquerda e da direita) e é aqui que entra a recursividade. 🙂 Revê o algoritmo e mete aqui para o pessoal ajudar 😉 Daniel Amorim VP for xRTML http://www.xrtml.org http://www.realtime.co Link to comment Share on other sites More sharing options...
lesiano Posted July 4, 2008 at 04:41 PM Report Share #195580 Posted July 4, 2008 at 04:41 PM int funcao (struct tree *ptr){ if(*ptr == NULL) return -1; else if(ptr->valor == ptr->valor->esq &&ptr->valor->esq == ptr->valor->dir) return 1; else return 0; funcao(struct tree *ptr); } Assim? Por acaso tenho q saber isto bem. Alguém tem teoria sobre isto? 😉 Link to comment Share on other sites More sharing options...
Baderous Posted July 4, 2008 at 05:12 PM Report Share #195584 Posted July 4, 2008 at 05:12 PM Isso não está bem por 3 motivos: - Estás a fazer *ptr==NULL. Mas não precisas do asterisco, pois ptr já é um apontador. - Estás a fazer: valor->esq e valor->dir. Sendo valor um inteiro e não um apontador, isso vai dar erro. O que queres será esq->valor e dir->valor. - Não podes fazer return 1 se a comparação for verdadeira, porque se for, tens que invocar a função recursivamente para a sub-árvore esquerda e para a sub-árvore direita. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now