Пример ввода
Вот как я предоставляю ввод:
Код: Выделить всё
n and dim = {3, 2} points: {0, 0} {3, 3} {3, 0}
Когда я пытаюсь построить дерево, кажется, что функция переходит в бесконечную рекурсию, и программа зависает. Я подозреваю, что проблема кроется в моей функции buildBalancedTree.
Код
Вот реализация функции buildBalancedTree:
Код: Выделить всё
std::unique_ptr KDTree::buildBalancedTree(
std::vector
& points,
int depth,
std::vector min_bound,
std::vector max_bound) {
if (points.empty()) {
return nullptr;
}
int axis = depth % points[0].point.size();
std::sort(points.begin(), points.end(), [axis](const Point& a, const Point& b) {
return a.point[axis] < b.point[axis];
});
size_t medianIndex = points.size() / 2;
Point medianPoint = points[medianIndex];
// Update bounds for left and right subtrees
std::vector left_max = max_bound;
left_max[axis] = medianPoint.point[axis];
std::vector right_min = min_bound;
right_min[axis] = medianPoint.point[axis];
auto node = std::make_unique(std::move(medianPoint), min_bound, max_bound);
node->left = buildBalancedTree(
points, depth + 1, min_bound, left_max
);
node->right = buildBalancedTree(
points, depth + 1, right_min, max_bound
);
return node;
}
Я считаю, что бесконечная рекурсия возникает потому, что я передаю один и тот же вектор точек как в левую, так и в правую сборку поддерева. Однако я не уверен, как правильно разбить вектор точек для поддеревьев.
Как решить эту проблему? При необходимости могу предоставить полный код моей программы.
Подробнее здесь: https://stackoverflow.com/questions/792 ... sion-issue