我正在为BST开发一个递归插入方法。假定该函数是一个递归辅助方法,并且位于名为Node的私有类中。节点类位于名为BinarySearchTree的类中,该类包含根的实例变量。当我尝试插入一个元素时,我在以下位置得到一个NullPointerException:
这左=插入((节点)左)。元素);
我不确定为什么会发生这种情况。如果我理解正确,在BST中,我假设将项目插入到所横穿路径的最后一点。感谢您的帮助!
private class Node implements BinaryNode<E>
{
E item;
BinaryNode<E> left, right;
public BinaryNode<E> insert(E item)
{
int compare = item.compareTo(((Node)root).item);
if(root == null)
{
root = new Node();
((Node)root).item = item;
}
else if(compare < 0)
{
this.left = insert(((Node)left).item);
}
else if(compare > 0)
{
this.right = insert(((Node)right).item);
}
return root;
}
}
这是因为在成功插入之前,您正在从空对象读取参数。另外,你的左和右都是空的,所以我将留给你去弄清楚,但是想想看。您应该插入新节点(项目)
。如果您的函数是递归的,那么您需要传入当前parentNode(root)的引用。下面是一个框架,希望您能够理解代码。
private Node<Item> insert(Node traversedNode, Item item)
{
if(traversedNode == null)
{
// make your life easier and pass item in a constructor
return new Node(item);
}
// Do this iff traversedNode != null, which it is in this block
int compare = item.compareTo(traversedNode.item);
...
// Now you check to see if compare < 0 and compare > 0
// then you insert your node accordingly and recursively
// you need to pass the current node left or right as your new traversedNode
// eg. traversedNode.left = insert( traversedNode.left, item )
}
因为你的左边是空的?不应该是这样吗。左=插入(项目)
但代码中还有其他问题。我会留给你去发现的。
通常我们主要称之为insert,比如
而这是我的主课,有没有其他方法做得更有效率?
在链表开头插入新节点 如何在链表的开头插入节点? 并用java实现了一个简单的LinkedList。
我在做一个程序,没有使用Java的内置链表类;我在从头开始做。除了编写一个将节点插入链表的特定位置的方法外,我在所有方面都取得了成功。 我有一个方法将一个特定的节点设置为“当前”节点。所以,例如,我有一个链表,看起来是这样的:猫-->狗-->使-->好-->宠物,“当前”等于2;这意味着“当前”节点是“狗”。 从这里开始,假设我想在“current”的位置插入一个新节点,它的info字段为AND。
点击后即可选中要素,然后通过点击需要插入节点的位置即可插入节点,并且可以通过拖拽形式对已插入的节点进行移动。
问题内容: 在ARKit中,我发现了2种在hitTest之后插入节点的方法 插入一个ARAnchor,然后在renderer中创建节点(_ renderer:SCNSceneRenderer,nodeFor锚:ARAnchor)-> SCNNode? sceneView.session.add(anchor:anchor) 直接插入节点 sceneView.scene.rootNode.addCh