前言
四元树又称四叉树是一种树状数据结构,在每一个节点上会有四个子区块。四元树常应用于二维空间数据的分析与分类。 它将数据区分成为四个象限。数据范围可以是方形或矩形或其他任意形状。
这种数据结构是由 拉斐尔·芬科尔(Raphael Finkel) 与 J. L. Bentley 在1974年发展出来 。
应用实例
四叉树索引结构可以快速的在二维空间划分数据 ,下面是一张图片的四叉树结构实例代码,根据图片中心划分,拥有非1:1图片的自适应性
tree.h
class Node {
public:
PNG *p; //the upper left pixel
Node **children; //pointer to four other node
int width; //当前像素区块的宽度
int height; //当前像素区块的高度
bool leaf; //是否是叶子节点,true 代表是叶子节点
int x; //当前像素区块左上角顶点像素的横坐标
int y; //当前像素区块左上角顶点像素的纵坐标
int mean_r; //Rmean
int mean_g; //Gmean
int mean_b; //Bmean
public:
int count;
Node();
Node(PNG* corner, int input_width, int input_height, int x, int y);
Node(Node &other);
Node(Node &&other);
Node& operator=(Node &other);
Node& operator=(Node &&other);
~Node();
void print();
pxl *get_pxl();
};
class Tree {
public:
Node *root; //根结点
public:
Tree();
~Tree();
Tree(Tree &other);
Tree& operator=(Tree &other);
void judge(int threshold