平衡二叉树平衡二叉树AVL操作模板操作模板
主要介绍了平衡二叉树AVL操作模板,需要的朋友可以参考下
复制代码 代码如下:
/**
* 目的:实现AVL
* 利用数组对左右儿子简化代码,但是对脑力难度反而增大不少,只适合acm模板
* 其实avl在acm中基本不用,基本被treap取代
* avl一般只要求理解思路,不要求写出代码,因为真心很烦
*/
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <string>
#include <time.h>
#include <queue>
using namespace std;
int COUNT; //统计树中不重复节点的个数
int HEIGHT; //统计数的高度
//数据节点
class DNode
{
public:
int data;
DNode():data(0){};
DNode(int d):data(d){}
bool operator = (const DNode &d){
return data = d.data;
}
bool operator == (const DNode &d){
return data == d.data;
}
bool operator > (const DNode &d){
return data > d.data;
}
bool operator < (const DNode &d){
return data < d.data;
}
void show(){
cout << endl;
cout << "***************" << endl;
cout << "data: " << data << endl;
}
};
//treap的节点
template<class T>
class AVLNode{
private:
int hgt; //节点的高度
public:
T data;
int count;
AVLNode<T> *son[2]; //0是左儿子,1是右儿子
AVLNode<T>(T data):data(data), count(1){
son[0] = son[1] = NULL;
hgt = 1;
}
int max(int a, int b){return a > b ? a : b;}
void show(){