Achar parentes em arvore avl em C

2 respostas
Mariana.Vecci

Olá amigo, to com um problemão quase impossível =/
Tenho uma árvore avl e gostaria de mostrar o avô e o tio de um elemento escolhido pelo usuário(elemento já inserido na árvore é claro).
Mas não consigo de jeito nenhum, não sei é a lógica que está errada:

avo(arvore_ptr pai)
{
        if ((pai != NULL) && (pai->parent != NULL))
                return pai->parent->parent;
        else
                return NULL;
}
 
tio(arvore_ptr pai)
{
        arvore_ptr g = avo(pai);
        if (g == NULL)
                return NULL; 
        if (pai->parent == g->esq)
                return g->dir;
        else
                return g->esq;
}
E o outro problema é na pesquisa, eu consigo localizar certinho o elemento na árvore, mas por incrível que pareça, to com dificuldades nos printf, "achou","não achou"
pesquisar (arvore_ptr pai, int c, char n[30], float p)
{
	if (pai)
	{
		if (c == pai-> cod)
		{ 
			printf("codigo = %d\n", pai -> cod);
			printf("nome = %s\n", pai -> nome);
			printf("preco = %.2f\n", pai -> preco);
	    } 
		else 
		{
            
			if (c < pai -> cod)
				pesquisar(pai -> esq, c, n, p); 
			else
				pesquisar(pai -> dir, c, n, p);
		}
		printf("achou");
    }
    printf("nao achou");
}

Desculpa se são dúvidas idiotas =/

Obrigada!

2 Respostas

WRYEL

vamos lá:

  • faltou sua Struc arvore_ptr.
  • funções em C não precisam de tipo de retorno ? :shock:
  • parece que você tá tentando fazer busca recursiva, o “Achou” não deveria ficar fora da método ?
Mariana.Vecci

oiii! tenho 3 arquivos no programa:
arvore.c onde tem as funções, arvore.h onde tem os prototipos e a struct e o main.c que é onde chamo as funções.

a minha struct:
struct ARVORE
{
    struct ARVORE *esq; 
    struct ARVORE *dir; 
    int cod; 
    char nome[30];
    float preco;
    int altura; 
    int depth;
    struct ARVORE *parent;
};

typedef struct ARVORE * Arvore_ptr;

Obrigada!

Criado 26 de junho de 2011
Ultima resposta 26 de jun. de 2011
Respostas 2
Participantes 2