void BSTree::CreateBSTree(BSTree *&BST,vector <t_point> databag,unsigned int n)
{ BST->data=databag;
BST->left=BST->right=NULL;
vector <t_point> leftnode;
vector <t_point> rightnode; //t_point是我自己定义的一个类,该类里面包含一个一维的数组
static int dep=0;
int k=dep%3;
double midd=mid(databag,databag.size(),k); //求取最中间大小的值
BST->discr=midd;
for(unsigned int i=0;i <(databag.size());i++) //根据是否大于中间值的大小来建立leftnode和rightnode
{
if(databag[i].dot[k]>=midd)
{
t_point *pi=new t_point(databag[i].dot[0],databag[i].dot[1],databag[i].dot[2]);
rightnode.push_back(*pi);
}
else
{
t_point *pi=new t_point(databag[i].dot[0],databag[i].dot[1],databag[i].dot[2]);
leftnode.push_back(*pi);
}
}
dep++;
if(databag.size()>10) //我把这修改成1000就正常了。但是我需要它小于20
{
if(rightnode.size()!=0)
{
BST->right=new BSTree;
CreateBSTree(BST->right,rightnode,unsigned int(rightnode.size())); //创建左子数
}
if(leftnode.size()!=0)
{
BST->left=new BSTree;
CreateBSTree(BST->left,leftnode,unsigned int(leftnode.size())); //创建左子数
}
}
} 处理的数据有6000个左右。
{ BST->data=databag;
BST->left=BST->right=NULL;
vector <t_point> leftnode;
vector <t_point> rightnode; //t_point是我自己定义的一个类,该类里面包含一个一维的数组
static int dep=0;
int k=dep%3;
double midd=mid(databag,databag.size(),k); //求取最中间大小的值
BST->discr=midd;
for(unsigned int i=0;i <(databag.size());i++) //根据是否大于中间值的大小来建立leftnode和rightnode
{
if(databag[i].dot[k]>=midd)
{
t_point *pi=new t_point(databag[i].dot[0],databag[i].dot[1],databag[i].dot[2]);
rightnode.push_back(*pi);
}
else
{
t_point *pi=new t_point(databag[i].dot[0],databag[i].dot[1],databag[i].dot[2]);
leftnode.push_back(*pi);
}
}
dep++;
if(databag.size()>10) //我把这修改成1000就正常了。但是我需要它小于20
{
if(rightnode.size()!=0)
{
BST->right=new BSTree;
CreateBSTree(BST->right,rightnode,unsigned int(rightnode.size())); //创建左子数
}
if(leftnode.size()!=0)
{
BST->left=new BSTree;
CreateBSTree(BST->left,leftnode,unsigned int(leftnode.size())); //创建左子数
}
}
} 处理的数据有6000个左右。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货