尝试将节点插入树中,但它无法正常工作

时间:2015-03-04 02:25:26

标签: java binary-tree

我有点困惑为什么我的代码没有插入超过第一个节点的代码。说我想使用下面的代码在(7,2)之后插入(5,4);在这种情况下,会触发第一个条件isVerticalp.x() < node.point.x()。自node.left以来我看到它的方式为null,我退出循环,因为node根据最新的分配保存了引用node.left,我应该可以使用node插入新的树叶。我没有看到这个吗? node真的不是node.left的引用吗?对不起,如果这是一个愚蠢的问题,我仍然只是有点参考。

public void insert(Point2D p) {
    if (p == null) {
        throw new java.lang.NullPointerException();
    }
    if (size == 0) {
        root = new Node(p);
        size++;
        return;
    }
    Node node = root;
    while (node != null) {
        // sink
        if (node.isVertical()) {
            if (p.x() < node.point.x()) {
                node = node.left;  // go left
            } else {
                node = node.right; // go right
            }
        } else if (node.isHorizontal()) {
            if (p.y() < node.point.y()) {
                node = node.left;  // go left
            } else {
                node = node.right; // go right
            }
        }
    }
    node = new Node(p);
}

1 个答案:

答案 0 :(得分:1)

您只是将new Node(p)分配给局部变量node,其值在函数返回后立即丢失。要更改现有树,您的作业的格式应为node.left = new Node(p);node.right = new Node(p)