我目前正在尝试为整数元组实现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添加值,但是我需要能够迭代这个并且想知道我怎么能这样做?例如,如果我想使用迭代器打印树...任何帮助都会很棒......
答案 0 :(得分:0)
交互者所需要的只是实现Iterator
界面,只需要提供boolean hasNext()
和Integer next()
。所以要问的问题是:如何在你的线索中表示一个位置,这样就可以(a)获取与该位置相关的值,以及(b)在给定当前位置的情况下找出“下一个”位置?
我不会发布实际的解决方案,因为我不确定这是否是作业。但请考虑:只需选择一个特定的trie节点,以及用于访问它的trie节点的路径,就可以在trie中表示“当前位置”。然后,您可以递归计算“next”元素:如果当前元素是具有子元素的节点,则查找endOfTuple
为true
的第一个子元素。如果当前元素没有子元素,则转到其父元素并前进到该父元素的下一个子元素。如果该父母没有下一个孩子,那么去吧 父母的下一个孩子等等。