📄 winnertree.h
字号:
#ifndef WINNER_TREE
#define WINNER_TREE
#define maxValue 10000
template <class T>
class WinnerTree {
private:
int maxSize; //允许的最大选手数
int n; //当前大小(外部结点数)
int lowExt; //最远层外部结点数
int offset; //偏移(加1即为第1个外结点)
int *t; //胜者树数组
T *e; //选手数组
void Play (int k, int lc, int rc);
public:
//static const T maxValue = 10000; //序列中不可能的大值
WinnerTree (int TreeSize = 20) //构造函数
: maxSize(TreeSize), n(0) {
t = new int[TreeSize];
for(int i = 0; i < TreeSize; ++i)
t[i] = maxValue;
}
~WinnerTree() { delete []t; } //析构函数
bool Initial (T a[], int size);
bool rePlay (int i);
//重构
void Update() { e[t[1]] = maxValue; } //修改
int Winner() const { return (n != 0) ? e[t[1]] : 0; } //取最终胜者
int Winner (int i) const { return (i < n) ? t[i] : 0; }//取第i个胜者
int Winner (int a, int b) { return (e[a] <= e[b]) ?
a : b;} //取两外结点胜者
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -