BinarySearchTree插入方法

时间:2015-11-21 22:10:15

标签: java insert binary-search-tree

我正在尝试使用递归来为BST编写插入方法。

 public void insert(DictEntry data) throws BSTException {
     if (find(data.getPosition()) == data){
         throw new BSTException();
     }
     else {
         if (current == null){
             root.setRoot(data);
     }
         else {
             while(current != null){
                 if (data.getPosition().compareTo(root.getRoot().getPosition()) < 0){
                     current = current.getLeft();
                 }
                 else{
                     if (data.getPosition().compareTo(root.getRoot().getPosition()) > 0){
                         current = current.getRight();
                     }
                     else
                         ;
                 }
                 insert(data);
             }
         }

     }
 }

但我不知道由于某种原因测试用例总是失败。 有人可以帮我解决一下吗?

1 个答案:

答案 0 :(得分:0)

此代码存在一些问题:

  1. 您将递归实现与迭代实现混合在一起。通过在函数“insert”中调用“insert(data)”来执行递归时,不需要“while”循环
  2. 当您最终点击递归if (current == null){的基本情况时,您在根处插入?您应该在“当前”处插入,因为这是您发现为空且与订单匹配的子树
  3. 您始终将您的数据与“root”进行比较,而不是“当前”
  4. 其他问题:

    • 您的代码格式错误(“}”在第一个“else”应缩进后,“else;”是不必要的)
    • 您正在通过更新函数外部的变量来使用递归:“current”。这可能有用,但风格很糟糕。您的方法应该与public void insert(DictEntry data, BSTNode node)类似insert(data, root),然后递归调用insert(data, node.getLeft()insert(data, node.getRight()