试图将一个节点插入树中,但它不起作用
trying to insert a node into a tree, but it's not working
我有点困惑,为什么我的代码没有插入第一个节点之后的节点。假设我想使用下面的代码在 (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
,其值在函数 returns 后立即丢失。要更改现有的树,您的分配应采用 node.left = new Node(p);
或 node.right = new Node(p)
.
的形式
我有点困惑,为什么我的代码没有插入第一个节点之后的节点。假设我想使用下面的代码在 (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
,其值在函数 returns 后立即丢失。要更改现有的树,您的分配应采用 node.left = new Node(p);
或 node.right = new Node(p)
.