Beispiel #1
0
/* Retorna a altura da arvore */
int alturaArvore(PNo raiz) {
	int altura_esq, altura_dir;
	
	if(raiz) {
		altura_esq = alturaArvore(raiz->esq); /* calcula a altura da subarvore esquerda */
		altura_dir = alturaArvore(raiz->dir); /* calcula a altura da subarvore direita */
		
		if(altura_esq > altura_dir)	return altura_esq+1; /* se a altura da subarvore esquerda for maior que a altura da subarvore direita entao retorna 
															a altura esquerda +1 */
		else return altura_dir+1; /* se não, retorna a altura da subarvore direita +1 */
	}else { 
		return 0; /* se raiz não existe entao a altura = 0 */
	}
}
Beispiel #2
0
int alturaArvore(node* node)
{
   if (node==NULL)
       return 0;
   else
   {
     int esq = alturaArvore(node->esq);
     int dir = alturaArvore(node->dir);

     if (esq > dir)
         return(esq + 1);
     else
        return(dir + 1);
   }
}
Beispiel #3
0
void inserir(PPNo tree) {
    int chave_pai, nova_chave, largura, largura_antiga, altura;
    PNo pai;

    printf("Digite o valor do novo no: ");
    scanf("%d",&nova_chave); /* guarda o valor do novo nó em nova_chave */

    do { /* laço que pergunta para o usuario escolher o pai do novo nó (mensagem se repete até que o pai seja valido) */
        printf("Digite o valor do noh pai do novo noh: ");
        scanf("%d",&chave_pai);
        pai = busca(*tree,chave_pai,NULL);
    } while(pai == NULL);

    system("cls");
    largura_antiga = geraLarguras(*tree); /* gera a a largura da arvore, e guarda a largura total em largura_antiga */
    desenhaArvore(*tree,5); /* desenha a arvore sem alteração do usuario */
    insereFilho(*tree,chave_pai,nova_chave); /* insere o nó que o usuario digitou */
    largura = geraLarguras(*tree); /* gera novamente as larguras, agora ja contando com o novo nó */
    desenhaArvoreCor(*tree,largura_antiga+5,nova_chave); /* desenha a nova arvore, colorindo o novo nó */
    altura = alturaArvore(*tree); /* altura recebe a altura da arvore */

    gotoxy((largura/2)+largura_antiga,altura*4+2);
    printf("Novo no: %d",nova_chave);
    gotoxy((largura/2)+largura_antiga,altura*4+3);
    printf("No pai: %d",chave_pai);

    getch();

}
Beispiel #4
0
void menu(PPNo tree) {
    int altura_arvore;
    char opcao;

    do {
        system("cls");
        geraLarguras(*tree);  /* lista recebe o ponteiro da lista ligada com as informações necessárias para o desenho */
        desenhaArvore(*tree,5);

        altura_arvore = alturaArvore(*tree);
        gotoxy(1,(altura_arvore+2)*4);
        printf("Escolha uma opcao:\n I - Inserir no\n R - Remover no\n F - Fechar\n");
        opcao = getch();
        switch(opcao) {
        case 'I':
            inserir(tree);
            break;
        case 'i':
            inserir(tree);
            break;
        case 'R':
            remover(tree);
            break;
        case 'r':
            remover(tree);
            break;
        case 'F':
            break;
        case 'f':
            break;
        default:
            printf("Opcao invalida\n");
        }
    } while(opcao != 'f' && opcao != 'F');

}
Beispiel #5
0
void remover(PPNo tree) {
    PNo no;
    int largura, largura_antiga, altura, chave;

    no = NULL;
    do { /* enquanto o usuario nao digitar um nó que exista na arvore, a mensagem se repete */
        printf("Digite o valor do no que deve ser deletado: ");
        scanf("%d",&chave);
        no = busca(*tree,chave,NULL);
    } while(no == NULL);

    system("cls");
    largura_antiga = geraLarguras(*tree); /* gera novamente a largura, salvando a largura total em largura_antiga */
    desenhaArvoreCor(*tree,5,chave); /* desenha a arvore sem alteração do usuario */
    altura = alturaArvore(*tree); /* altura recebe a altura total da arvore, antes da remoção do nó escolhido pelo usuario */
    removeNo(tree,chave); /* remove o nó escolhido pelo usuário */
    largura = geraLarguras(*tree); /* gera a largura da arvore, já com o novo nó */
    desenhaArvore(*tree,largura_antiga+5); /* desenha a nova arvore */

    gotoxy(largura_antiga/2,altura*4+2);
    printf("No removido: %d",chave);

    getch();
}