2013-03-23 61 views
0

我目前正试图为整数元组实现一个trie数据结构。并实现如下:Java中的尝试迭代器

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; 
} 

} 

然后我有一个线索类,如下所示:

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; 
} 
} 

我可以值到这个线索,但我需要能够遍历这个,想知道我怎么能做到这一点?例如,如果我想打印使用迭代树...任何帮助将是巨大的......

+0

谷歌使用迭代器的一个ArrayList – 2013-03-23 16:16:26

+0

你'curNode.links.contains(节点)'线将轻松突破(或如果你忘记实现'equals()',它会被破坏,因为它取决于equals()的实现。尝试迭代链接并明确比较链接标签。 – jonnydee 2013-03-23 16:37:51

+0

是啊,它坏了!废话...我如何实现平等?它在Node类中吗? – user1950055 2013-03-23 17:58:51

回答

0

所有你需要一个迭代符是实现Iterator接口,只需要你提供boolean hasNext()Integer next()。所以要问的问题是:如何在你的线索表示一个位置,以便可以(a)获取与该位置相关的值,并且(b)给出当前位置的“下一个”位置?

我不会发布实际的解决方案,因为我不确定这是否是家庭作业。但是考虑一下:你可以通过选择一个特定的trie节点和你用来达到它的trie节点的路径来在你的trie中表示一个“当前位置”。然后,您可以递归地计算“下一个”元素:如果当前元素是具有子元素的节点,则找到endOfTupletrue的第一个子元素。如果当前元素没有子元素,则转到其父元素并前进到该父元素的下一个子元素。如果家长没有下一个孩子,然后去它父母的下一个孩子,等