/* 最佳二叉排序树是具有最佳检索效率的二叉排序树, 本程序提供了最佳二叉排序树的构造方法*/ #include #define MAXVALUE 1e8 #define N 10 void opticBTree(float p[], float q[], float *c[], float *w[], int *r[], int n) { int k0, i, j, k, m; float min; for (i = 0; i <= n; i++) /* 数组下三角清零 */ for (j = 0; j <= i; j++) c[i][j] = w[i][j] = r[i][j] = 0; for (i = 0; i <= n; i++) { /* 计算w[i][j] */ w[i][i] = q[i]; for (j = i+1; j <= n; j++) w[i][j] = w[i][j-1] + p[j] + q[j]; } for (j = 1; j <= n; j++) { /* 计算一个内部结点的最佳二叉排序树 */ c[j-1][j] = w[j-1][j]; r[j-1][j] = j; } for (m = 2; m <= n; m++) /* 计算m个结点的最佳二叉排序树 */ for (i = 0; i <= n-m; i++) { j = i+m; min = MAXVALUE; k0 = i+1; for (k = i+1; k <= j; k++) /* 在i