我正在制作一个二叉树,当我向树中添加一个新的字符串节点时,我必须先搜索以查看该节点是否已经存在。如果是这样,我需要将其值增加1,而不是将其添加到其他节点。我需要一个数据结构来保存两种数据类型
哪个数据结构最适合这样做?
我正在制作一个二叉树,当我向树中添加一个新的字符串节点时,我必须先搜索以查看该节点是否已经存在。如果是这样,我需要将其值增加1,而不是将其添加到其他节点。我需要一个数据结构来保存两种数据类型
哪个数据结构最适合这样做?
除非我误解了你,否则你的问题很简单。只需创建一个包含两个成员变量的类:
public class Node {
v1 data_type_1;
v2 data_type_2;
}
将此用作二叉树的节点。
这个答案很好,但是如果Node包含命名为String和int的成员 – pamphlet 2013-03-27 18:38:44
咦,本质上也许
帮助。这是一个AVLTree的实现,它是一个平衡的二叉树。我会用泛型类型(和我)来实现它,这样你也可以存储其他内容。
在我的情况下,它被用作索引结构,它应该能够被存储在大部分的主内存中(但也包括使用版本控制算法的磁盘表示)。我正在存储一个字符串/路径组合(键)和一组简单的属于路径(值)的ID。
但是,您可能必须将两个“指针”存储到两个子节点或两个节点对象的内存中引用。
编辑:您可能还需要从谷歌番石榴即将BinaryTreeTraverser一眼:https://code.google.com/p/guava-libraries/source/browse/guava/src/com/google/common/collect/BinaryTreeTraverser.java
巴尼的回答是好。但要更具体地回答您的问题,您可能希望节点类看起来像:
public class Node
{
String value;
int count;
Node leftChild;
Node rightChild;
}
您将为您的树创建这些实例。其中一个例子就是“根”。所有其他实例将通过leftChild
和rightChild
直接或间接挂起。
祝你好运!
所以结构的座右铭是通过减少重复次数来减少内存。并按排序顺序存储数据。
然后这个节点可以用于你的树。
public class node
{
String value;
int count;
node left;
node right;
}
但还有更好的解决方案,然后这甚至是TreeMap的,因为这里搜索需要O(1)(重复计数增量相当于搜索)在前面的情况下为O(日志(N))。
Map testTreeMap = new TreeMap();
if(testTreeMap.get(MyString)!=null)
{
testTreeMap.put(MyString, testTreeMap.get(MyString) +1)
}
else
{
testTreeMap.put(MyString , Integer(count)) // count=1
}
有了这个,你完全完成了..!
http://tutorialswithexamples.com/java-treemap-tutorial-and-examples/
只需要一个带有字符串和计数器的节点类。 – 2013-03-27 18:33:59
任何DataStructure都可以工作,它只关心你如何读取字符串并在最后附加一个Integer。所以即使是一个带整数前缀的字符串也可以工作 – 2013-03-27 18:36:10
是真的,但我不清楚这是“最好的”。 – pamphlet 2013-03-27 18:37:13