当有序表中的个记录的查找概率不等时,要是的查找性能最优,根据折半查找的判定树可知,可以建立静态最优查找树,但是构造最优查找树的花费的时间代价能大,所以书上介绍了一个二叉树——次优查找二叉树,它的建立方法,书上讲了,但是原理没有说,我也无从得知,只能按照书上的算法,先建立次优二叉树。
关键字 A B C D E F G H I
权值 1 1 2 5 3 4 4 3 5
#include<iostream>
#include<fstream>
#include<cstdlib>
#include<queue>
using namespace std;
struct Binode{
char data;
Binode *lchild,*rchild;
};
typedef Binode* Bitree;
void vist(char c){
cout<<c<<" ";}
void Creatsw(int sw[],int quan[],int n){
for(int i=0;i!=n+1;++i){ int x=0;
for(int j=0;j!=i;++j){
x+=quan[j];
} sw[i]=x;
}
}
void Second_option(Bitree &T,char ch[],int sw[],int low,int high){//利用书上的建立方法,原理我也不知道
int mins=abs(sw[high]-sw[low]),dw=sw[high]+sw[low-1];
int i=low;
for(int j=low+1;j<