当前位置: 首页 > 知识库问答 >
问题:

插入BST而不使用头节点JAVA

夏俊人
2023-03-14

我正在为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;
     }
}

共有2个答案

丌官浩旷
2023-03-14

这是因为在成功插入之前,您正在从空对象读取参数。另外,你的左和右都是空的,所以我将留给你去弄清楚,但是想想看。您应该插入新节点(项目)。如果您的函数是递归的,那么您需要传入当前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 )
   }
养研
2023-03-14

因为你的左边是空的?不应该是这样吗。左=插入(项目)

代码中还有其他问题。我会留给你去发现的。

 类似资料:
  • 通常我们主要称之为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