经过一天努力实现了kd-tree树二维的创建,但是代码只适用于二维,这是令人遗憾的地方。
在这个过程中学到了不少东西,特别是对vector的一些用法,多了更多的了解。
思路:创建树时,传递vector为形参,以第n%2维为变量,对结构体vector排序,找出中位数,奇数找中间,
偶数取第(n/2)+1个,以它为分界线,左边的放在vector<>a中,右边的数放在vector<>b中,中位数那个点,
保存为节点,递归调用创建左右子树。
代码限制普适性的地方:1、创建了点的结构体
2、找到操作维数,并对其操作的代码
学到的用法:
1、vector可当形参,而且跟其他形参一样,函数中的操作可不影响原vector
#include<iostream>
#include<vector>
using namespace std;
void f(vector<int> x){
x[0]=0;
}
int main(){
vector<int> a;
a.push_back(1);
a.push_back(2);
f(a);
cout<<a[0];
return 0;
}
结果:
2、ist