English 中文(简体)
Java-二进制搜索树有一个迭代器()方法,实现困难
原标题:Java - Binary Search Tree has a iterator() method, difficulty with implementing

I m trying to write an implementation of iterator so that I can call it within my BST class, under iterator() method.

My solution (not sure if it would work correctly) is to use a stack or a queue to store the nodes of the BST. Trouble is, my Iterator Implementation class can t recognise my BST nodes when I pass the "root" node into its constructor.

为了便于想象,这是我的BST实现,它适用于其他方法,包括添加、删除等。但我目前只能使用迭代器()方法。因为我不知道该怎么开始,该怎么办。

   public class DictionaryImp<E extends Comparable<E>> implements Dictionary<E> {

        public class DictNode {
           public DictNode left;
           public DictNode right;
           public String position;
           public E value;

           public DictNode(E value, DictNode left, DictNode right, String position) {
               this.left = left;
               this.right = right;
               this.position = position;
               this.value = value;
           }
        }

       public DictNode root;

       //... more code

       public Iterator<E> iterator() {
             // provides a fail fast iterator for the Dictionary
             // starting at the least element greater than or equal to start
             Iterable<E> itr = new DictionaryItr<E>(root);
             Iterator<E> it = itr.iterator();
             return it;
       }
}

这是我为Iterator实现编写的

public class DictionaryItr<E> implements Iterable<E> {
    public DictionaryItr(DictNode root) {
        first = null;
        this.inOrderTraversial(root);
    }

    public void inOrderTraversial(DictNode node) {
        if (node != null) {
            inOrderTraversial(node.left);
            first.push(node.value);
            inOrderTraversial(node.right);
        }
    }

    // more code: push, peek, pop

    public Iterator<E> iterator() {
        return new ListIterator();
    }
    private class ListIterator implements Iterator<E> {
        private Node current = first;
        public boolean hasNext()  { return current != null;                     }
        public void remove()      { throw new UnsupportedOperationException();  }

        public E next() {
            if (!hasNext()) throw new NoSuchElementException();
            E item = current.item;
            current = current.next; 
            return item;
        }
    }
}
最佳回答

DictNode类是一个内部类。当您在另一个类中使用它时,内部类名必须被限定(与外部类名一起)或导入。

问题回答

暂无回答




相关问题
Spring Properties File

Hi have this j2ee web application developed using spring framework. I have a problem with rendering mnessages in nihongo characters from the properties file. I tried converting the file to ascii using ...

Logging a global ID in multiple components

I have a system which contains multiple applications connected together using JMS and Spring Integration. Messages get sent along a chain of applications. [App A] -> [App B] -> [App C] We set a ...

Java Library Size

If I m given two Java Libraries in Jar format, 1 having no bells and whistles, and the other having lots of them that will mostly go unused.... my question is: How will the larger, mostly unused ...

How to get the Array Class for a given Class in Java?

I have a Class variable that holds a certain type and I need to get a variable that holds the corresponding array class. The best I could come up with is this: Class arrayOfFooClass = java.lang....

SQLite , Derby vs file system

I m working on a Java desktop application that reads and writes from/to different files. I think a better solution would be to replace the file system by a SQLite database. How hard is it to migrate ...

热门标签