C++ 基于数据集合执行二叉树搜索

C++ 基于数据集合执行二叉树搜索,c++,binary-search-tree,C++,Binary Search Tree,我被要求为具有x、y和z坐标的数据集合编写BTS代码,该坐标具有负数和正数,要求如下: 该程序能够基于数据集合执行二叉树搜索 请使用此电子邮件中提供的数据。它是X、Y和Z坐标的集合 该计划必须能够: 寻找正X,负X,正y,负y,正z,负z 用户可以搜索所有正数、所有负数等 因此,用户将输入一个X坐标,它将在输出中同时显示Y和Z,另一个是当用户想要搜索X的所有正/负坐标时,它还将显示Y和Z以及X。 据我所知,二进制搜索只能对单个数字执行搜索,但不能对包含3个数字的元素字符串执行搜索 这是X、Y

我被要求为具有x、y和z坐标的数据集合编写BTS代码,该坐标具有负数和正数,要求如下:

  • 该程序能够基于数据集合执行二叉树搜索

  • 请使用此电子邮件中提供的数据。它是X、Y和Z坐标的集合

  • 该计划必须能够:
  • 寻找正X,负X,正y,负y,正z,负z
  • 用户可以搜索所有正数、所有负数等
因此,用户将输入一个X坐标,它将在输出中同时显示Y和Z,另一个是当用户想要搜索X的所有正/负坐标时,它还将显示Y和Z以及X。 据我所知,二进制搜索只能对单个数字执行搜索,但不能对包含3个数字的元素字符串执行搜索

这是X、Y和Z数据集合中的少数几个,例如:

-0.090729 0.122568 0.030209 <--- one line of X Y Z coordinate

-0.179660 0.154953 0.033881

-0.335793 0.244996 0.269589

0.075957 0.149626 0.114472
如果我将所有数据放入data.txt文件并在main.cpp中读取它,该代码是否有效

int main ()
{
    {

    ifstream myReadFile;
    myReadFile.open("Data.txt");
    char output[100];
     if (myReadFile.is_open()) 
     {
     while (!myReadFile.eof()) 
        {
            myReadFile >> output;
            cout<<output;
        }
     }
    myReadFile.close();
    return 0;
    }
int main()
{
{
ifstreammyreadfile;
myReadFile.open(“Data.txt”);
字符输出[100];
如果(myReadFile.is_open())
{
而(!myReadFile.eof())
{
myReadFile>>输出;
你可以说,但是你所展示的代码在排序数组上做了一个比较,这不是一回事

使用二进制搜索的一种方法是将X、Y和Z值放在一个数组或自定义结构中。类似于:

struct Vertex {
  float X;
  float Y;
  float Z;
};
修改二进制搜索函数,使其采用这些结构的数组而不是整数数组。必须将搜索键设置为X浮点值:

int binary_search(Vertex array[],int first,int last, float x_value);
将X、Y、Z值加载到
顶点数组中
,然后按X值排序:

bool vertexXComparator(const Vertex& lhs, const Vertex& rhs) {
  return lhs.X < rhs.X;
}

std::sort(list, list+number_of_vertexes, vertexXComparator);
bool Vertex比较程序(常量顶点和左侧、常量顶点和右侧){
返回左侧X<右侧X;
}
排序(列表,列表+顶点数,顶点比较);
然后您应该能够在排序列表上使用二进制搜索(或std::binary_搜索)

我会有点担心使用浮点数作为搜索键。测试浮点数是否相等

.

Hi,这里有一些想法:1)在执行bst之前必须对输入集合进行排序。2)重新融合可能以stackoverflow结束,最好使用循环3)为什么不使用sqlite数据库?
struct Vertex {
  float X;
  float Y;
  float Z;
};
int binary_search(Vertex array[],int first,int last, float x_value);
bool vertexXComparator(const Vertex& lhs, const Vertex& rhs) {
  return lhs.X < rhs.X;
}

std::sort(list, list+number_of_vertexes, vertexXComparator);