Chave a ser inserida: 26 (28 ou 30 também são válidas)
typedef struct no23{ int nch; /* Número de chaves (1 ou 2) no nó */ struct no23 *esq, *cen, *dir; /* Apontadores esquerdo, central e direito */ int chesq, chdir; /* Chaves esquerda e direita */ } No23; /* Retorna 1 se a altura de arv aumenta após a inserção de chave */ /* Retorna 0 caso contrário. Chaves repetidas não são inseridas. */ int cresce(No23* arv, int chave) { if (arv == NULL) /* Árvore vazia, qualquer inserção aumentará a altura */ return 1; if (arv->chesq == chave || arv->nch == 2 && arv->chdir == chave) return 0; /* Chaves repetidas não são inseridas. */ if (arv->esq == NULL) /* Inserção em uma folha */ return arv->nch == 2; /* a altura aumenta se não há espaço */ int c; if (chave < arv->chesq) /* Chamada recursiva na sub-árvore apropriada */ c = cresce(arv->esq, chave); else if (arv->nch == 1 || chave < arv->chdir) c = cresce(arv->cen, chave); else c = cresce(arv->dir, chave); return c && arv->ch == 2; /* A altura aumenta se houve aumento durante a chamada recursiva e não há espaço no nó corrente */ }
0 1 1 1 0 0 0 0 0 1 0 0 0 0 0 0 int dist_max_duas_arestas(int u, int v, int n, int M[][]) { if (M[u][v]) return 1; int i; for (i = 0; i < n; i++) if (M[u][i] && M[i][v]) return 1; return 0; } int dist_max_tres_arestas(int u, int v, int n, int M[][]) { if (dist_max_duas_arestas(u,v,n,M)) return 1; int i; for (i = 0; i < n; i++) if (M[u][i] && dist_max_duas_arestas(u,v,n,M)) return 1; return 0; }
' ': 110 '.': 11100 'A': 11101 'D': 11110 'E': 00 'F': 010 'I': 11111 'M': 0110 'N': 0111 'O': 1000 'R': 101 'S': 1001
' ': 110 'A': 11110 'D': 11111 'E': 00 'F': 010 'I': 0110 'M': 0111 'N': 1000 'O': 1001 'R': 101 'S': 1110