struct quadtree *node,
struct quadtree_ops *ops)
{
- int i, max_child, max_child_idx;
+ int i;
validate_tree(root);
/* First remove all children, if any */
- while (1) {
-
- /*
- * Attempt to move from the middle of the most dense
- * branch. That might increase the chances of creating
- * a tree with better balance.
- */
-
- max_child = -1;
- max_child_idx = -1;
- for (i = 0; i < 4; i++) {
- if (!node->child[i])
- continue;
-
- if (node->child[i]->children > max_child) {
- max_child = node->child[i]->children;
- max_child_idx = i;
- }
- }
+ for (i = 0; i < 4; i++) {
+ if (!node->child[i])
+ continue;
- if (max_child < 0)
- break;
+ if (node->child[i] == node ||
+ node->child[i] == node->parent)
+ trap();
- _quadtree_reposition_reqursively(root,
- node->child[max_child_idx],
- ops);
- node->child[max_child_idx] = 0;
+ _quadtree_reposition_reqursively(root, node->child[i], ops);
+ node->child[i] = 0;
}
/* There are no children left, reset stats */