插入元素到四叉树时无限循环问题

时间:2017-03-29 22:00:59

标签: java quadtree

我在点击鼠标时试图将元素插入到四叉树中。当鼠标点击并发送点作为参数时,我调用insert方法。几次点击后,插入方法中的循环变为无穷大,我无法找到原因。

这里的方法;

public void insert(Point point){
        Node newNode = new Node(point);
        if(root==null){
            root=newNode;
            return;
        }
        Node current=root;
        Node parent=null;

        while(true){
            parent = current;
            System.out.println("a");
            if(point.getX()<current.point.getX() && point.getY()<current.point.getY()){
                current=current.NW;
                if(current==null){
                    parent.NW= newNode;
                    return;
                }           
            }
            else if(point.getX()>current.point.getX() && point.getY()<current.point.getY()){
                current=current.NE;
                if(current==null){
                    parent.NE= newNode;
                    return;
                }           
        }
            else if(point.getX()<current.point.getX() && point.getY()>current.point.getY()){
                current=current.SW;
                if(current==null){
                    parent.SW=newNode;
                    return;
                }
            }
            else if(point.getX()>current.point.getX() && point.getY()>current.point.getY()){
                current=current.SE;
                if(current==null){
                    parent.SE=newNode;
                    return;
                }
            }

    }
    }

如果您需要其他代码,请与我们联系。

1 个答案:

答案 0 :(得分:1)

好吧,您还没有涵盖pointcurrent.point是相同点,或者水平排列或垂直排列的情况。在这三种情况中的每一种情况下,您的if条件都不是真的,并且无法退出循环。

您需要将<条件更改为<=或将>条件更改为>=。所以,像

if(point.getX()<=current.point.getX() && point.getY()<=current.point.getY()){

并且类似地使用<进行的所有其他比较。

这确保您的循环可以在X值相等或Y值相等时退出。