我无法输出二叉搜索树。我必须构建树,然后将树中的所有双精度元素按顺序放入一个向量中,然后按顺序输出该向量。我遇到的问题是将其导入矢量并输出它。当我刚刚输出树时,一切都按原样运行。该向量应该被排序,并且std :: vector * sort()应该返回一个指向向量的指针。我遇到的问题是我遇到了分段错误,我不知道为什么。任何意见,将不胜感激。这是我的代码:二进制搜索树输出
#include <vector>
struct ordered_set {
private:
class node {
public:
double val;
node* left;
node* right;
node(double v, node* l, node* r): val(v), left(l), right(r) { }
};
node* root;
int size;
public:
ordered_set();
void insert(double x);
std::vector<double>* sort();
std::vector<double>* order(node*);
};
#include <vector>
#include <iostream>
#include "ordered_set.hpp"
ordered_set::ordered_set()
{
root = 0;
size = 0;
}
void ordered_set::insert(double x)
{
node* data = new node(x, 0, 0);
node* parent;
parent = 0;
if(root == 0)
root = data;
else
{
node* curr = root;
while (curr)
{
parent = curr;
if(data->val > curr->val)
curr = curr->right;
else
curr = curr->left;
}
if(data->val < parent->val)
parent->left = data;
else
parent->right = data;
}
++size;
}
std::vector<double>* ordered_set::sort()
{
node* ndptr = root;
return order(ndptr);
}
std::vector<double>* ordered_set::order(node* top)
{
node* curr = top;
std::vector<double>* set;
std::vector<double>::iterator it = set->begin();
if(curr != 0)
{
order(curr->left);
set->insert(it, curr->val);
++it;
order(curr->right);
}
else return set;
}
谢谢你的解释。在你说完之后,它非常有意义,我说:“不要!”非常感谢! – user870222