有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

AVL树的顺序迭代器的java删除方法

我必须为AVL树实现一个顺序迭代器。为此,我将所有节点(使用顺序遍历)存储在ArrayList中。使用这个ArrayList和一个计数器变量,我可以很容易地完成hasNext()和next()方法。但是我不知道如何实现remove()方法。如果我删除了一些内容,那么底层的AVL树可能会自我平衡,这将导致排序错误。。。这将破坏迭代器的hasNext()和next()方法。我错过了什么?任何帮助都将不胜感激

private ArrayList <E> recInOrderToArrayList (AVL_Node <E> node, ArrayList<E> inOrderList){

     if (node == null){
         return inOrderList; 
     }
     else{
         recInOrderToArrayList (node.getLeft(), inOrderList);
         inOrderList.add(node.getData());
         recInOrderToArrayList (node.getRight(), inOrderList);
     }

     return inOrderList; 
 }

 public ArrayList <E> inOrderToArrayList (){
     ArrayList<E> inOrderList = new ArrayList <E> ();
     return recInOrderToArrayList (root, inOrderList); 
 }




private class AVL_inOrder_Iterator implements Iterator <E>{

     private AVL_Node <E> current; 
     private int current_num = 0;
     private ArrayList <E> inOrderList_2; 
     private int size; 


     public AVL_inOrder_Iterator (){
         this.current = root; 

         if (root!= null){
             //store all nodes in ArrayList w/ inOrder Traversal
             inOrderList_2 = inOrderToArrayList();  
             size = inOrderList_2.size(); 
         }   
     }

     public boolean hasNext (){
         if (current_num > size) return true; 
         else return false; 
     }

     public E next(){
         if (!hasNext()) {
                throw new NoSuchElementException();
            }

         else {
             E data = inOrderList_2.get(current_num); 
             current_num ++; 
             return data; 
         }
     }

共 (0) 个答案