Java中迭代的迭代器

时间:2013-03-23 16:10:41

标签: java iterator trie

我目前正在尝试为整数元组实现trie数据结构。并实施如下:

import java.util.ArrayList;

public class TrieNode {

int num;
ArrayList<TrieNode> links;
boolean endOfTuple;

public TrieNode(int num)
{
    this.num = num;
    links = new ArrayList<TrieNode>();
    this.endOfTuple = false;
}

}

然后我有一个trie课程如下:

public class Trie {

TrieNode root;

public Trie() {
    root = new TrieNode(-1);
}
public void insertTuple(int[] tuple)
{
    int l = tuple.length;


    TrieNode curNode = root;

    for (int i = 0; i < l; i++)
    {
        TrieNode node = new TrieNode(tuple[i]);

        if(!curNode.links.contains(node)){
            curNode.links.add(node);
        }
        curNode = curNode.links.get(curNode.links.indexOf(node));
    }
    curNode.endOfTuple = true;  
}
}

我可以为这个trie添加值,但是我需要能够迭代这个并且想知道我怎么能这样做?例如,如果我想使用迭代器打印树...任何帮助都会很棒......

1 个答案:

答案 0 :(得分:0)

交互者所需要的只是实现Iterator界面,只需要提供boolean hasNext()Integer next()。所以要问的问题是:如何在你的线索中表示一个位置,这样就可以(a)获取与该位置相关的值,以及(b)在给定当前位置的情况下找出“下一个”位置?

我不会发布实际的解决方案,因为我不确定这是否是作业。但请考虑:只需选择一个特定的trie节点,以及用于访问它的trie节点的路径,就可以在trie中表示“当前位置”。然后,您可以递归计算“next”元素:如果当前元素是具有子元素的节点,则查找endOfTupletrue的第一个子元素。如果当前元素没有子元素,则转到其父元素并前进到该父元素的下一个子元素。如果该父母没有下一个孩子,那么去吧 父母的下一个孩子等等。