从排序的数组列表构建BST的问题

时间:2018-10-03 10:49:11

标签: java sorting arraylist methods binary-search-tree

我有以下代码,但是在调用“ sortedArrayToBST”方法时出现错误,我该如何解决?

 public static <E> BTree<E> taulukostaPuu(ArrayList<E> L) {

     BTree<E> T = new BTree<E>();

     sortedArrayToBST(L,T);    <-----gives error here.


     return T;

} 




private static <E extends Comparable<? super E>> 
BTree<E> sortedArrayToBST(ArrayList<E> l, BTree<E> t) {

        if(t.getRoot() == null) {
        t.setRoot(new BTreeNode<E>(l.get(0)));
        }

        for(int i = 0 ; i < l.size();  i++) {   


             E q = l.get(i);
             BTreeNode<E> p = t.getRoot();

        while(true)
        {    
         if(q.compareTo(p.getElement()) <= 0)
         {  

          if(p.getLeftChild() == null)
           {     
           p.setLeftChild(new BTreeNode<E>(q));
           break;                         
           }
          else
          p = p.getLeftChild();
         }
         else if(q.compareTo(p.getElement()) > 0)
         {
          if(p.getRightChild() == null)
           {      
           p.setRightChild(new BTreeNode<E>(q));
           break;                            
           }
          else
              p = p.getRightChild();          
         }   
        }
     }
    return t;
 }

我想保留这种结构。我正在使用包含getLeftChild()等的自定义导入,应该很容易理解。

如果有任何办法可以在线性时间内完成此操作,那也很好。我很确定它的效果不如O(n)。

1 个答案:

答案 0 :(得分:0)

E可以是taulukostaPuu中的任何内容,不受限制。但是,在sortedArrayToBST中它必须扩展Comparable。这样您就会遇到类型冲突。

在此处使用相同的约束:

public static <E extends Comparable<? super E>>
    BTree<E> taulukostaPuu(ArrayList<E> L)