即时通讯工作的项目和我的项目我必须建立一棵树。树将有大约64000叶子。不幸的是我一直运行到一个stackoverflow错误,我不知道该怎么做。我写错了递归方法吗?还是有错误的解决方法? 代码在构造:建设和巨大的树,并与stackoverflow错误bug
for(int i = 0; i < wordHolder.size(); i++) {
add(i);
}
添加方法:
public void add(int i){
mainTreeNode = treeSetup(mainTreeNode, 0, wordHolder.get(i), countHolder.get(i));
}
和,设置了树的递归方法:
private TreeNode treeSetup(TreeNode node, int letterCount, String s, List<Integer> i) {
if(letterCount == 26) {
letterCount = 0;
}
if(node == null) {
node = new TreeNode(s,i);
} else if (i.get(letterCount) >= node.test.get(letterCount)) {
node.right = treeSetup(node.right, letterCount++, s, i);
} else if(i.get(letterCount) < node.test.get(letterCount)) {
node.left = treeSetup(node.left, letterCount++, s, i);
}
return node;
}
节点是包含2层数据结构标准节点(一个列表和一个字符串)。这个想法是节点根据列表包含的内容放入一个位置。此外,树中的每个级别都根据与列表不同的值进行检查(如KD树),因此是letterCount变量。问题似乎在
node.right = treeSetup(node.right, letterCount++, s, i);`
行,但基于“if语句”具有“=”符号的更改。如果我从两个“if语句”中删除“=”符号,问题就消失了,但我失去了大量的准确性。请帮助
但是,现在为我解决这个stackoverflow问题? –
另外,我必须使用kd树,问题要大得多,kd树是解决它的方法(它的基于相似性) –