我有点困惑,为什么我的代码没有插入第一个节点之后的节点。说我想使用下面的代码在(7,2)之后插入(5,4);在这种情况下触发第一个条件isVertical
和p.x() < node.point.x()
。在我看来,由于node.left
为空,我退出了循环,并且由于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);
}
您只是将new Node(p)
分配给局部变量node
,一旦函数返回,其值就会丢失。若要更改现有树,您的作业应具有node.left = new Node(p);
或node.right = new Node(p)
的形式。