我需要一个数据结构来保存两种数据类型

时间:2013-03-27 18:28:19

标签: java data-structures binary-tree binary-search-tree

我正在创建一个二叉树,当我向树中添加一个新的字符串节点时,我必须首先搜索该节点是否已经存在。如果是这样,我需要将其值增加一,而不是将其添加到不同的节点。

哪种数据结构最适合这样做?

4 个答案:

答案 0 :(得分:1)

除非我误解你,否则你的问题很容易。只需创建一个包含两个成员变量的类:

public class Node {
    v1 data_type_1;
    v2 data_type_2;
}

将其用作二叉树的节点。

答案 1 :(得分:1)

巴尼的答案很好。但是为了更具体地回答你的问题,你可能希望你的节点类看起来像:

public class Node
{
    String value;
    int count;

    Node leftChild;
    Node rightChild;
}

您将为您的树创建这些实例。其中一个实例将是“根”。所有其他实例将通过leftChildrightChild直接或间接悬挂在路线上。

祝你好运!

答案 2 :(得分:0)

嗯,基本上可能是

https://github.com/JohannesLichtenberger/sirix/tree/master/bundles/sirix-core/src/main/java/org/sirix/index/avltree

帮助。它是AVLTree的实现,是一个平衡的二叉树。我用泛型类型(我有)实现它,这样你就可以存储其他内容。

在我的情况下,它被用作索引结构,它应该能够在大多数情况下存储在主存储器中(但也使用版本控制算法的磁盘表示)。我正在存储一个字符串/路径组合(键)和一组属于路径(值)的ID。

但是,您可能必须将两个“指针”存储到两个子节点或内存中对两个节点对象的引用。

编辑:您可能还会仔细查看Google Guava即将推出的BinaryTreeTraverser:https://code.google.com/p/guava-libraries/source/browse/guava/src/com/google/common/collect/BinaryTreeTraverser.java

答案 3 :(得分:0)

因此,结构的座右铭是通过减少重复计数来最小化内存。并按排序顺序存储数据。

此节点可能对您的树有用。

public class node
{
   String value;
   int count;
   node left;
   node right;
}

但是有更好的解决方案然后这甚至是TreeMap,因为这里搜索需要O(1)(重复计数增量相当于搜索),其中O(log(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/